我有一个web api,它返回一个用户帖子列表,其中包含用户的姓名,用户名,图片,帖子,评论等。
在我的Android应用中,我有一个包含这些用户帖子的ListView。我使用适配器中的ViewHolder模式进行设置。
现在在每个ListView项目中,我需要在帖子上设置点击监听器,userimage,name,comment等。在监听器中,我需要获取ViewHolder的位置,以便从我的数据中获取相应的Object。我该怎么做?
答案 0 :(得分:0)
每当你第一次给视图充气时,在你的适配器中,convertView == null,膨胀你的视图行,然后在新的膨胀视图上调用findViewById来获取你的子视图并单独设置它们的点击监听器。存储我用于我的应用程序的位置的一种方便方法是获取视图,并在视图上调用具有位置的setId()。然后,当您需要该位置时,可以在视图上调用getId()。
答案 1 :(得分:0)
您还可以在适配器中使用您的帖子(或其ID /位置)定义您自己的侦听器以进行参数。例如:
public interface OnPostClickListener {
void onUserImageClick(Post post);
void onUserNameClick(Post post);
...
}
private OnPostClickListener mListener;
public void setOnPostClickListener(OnPostClickListener listener) {
mListener = listener;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
final Post post = getItem(position);
...
holder.userImage.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v) {
if(mListener != null)
mListener.onUserImageClick(post);
}
});
holder.userName.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v) {
if(mListener != null)
mListener.onUserNameClick(post);
}
});
...
}
在你的活动中:
mAdapter.setOnPostClickListener(new OnPostClickListener(){
@Override
public void onUserImageClick(Post post) {
// Do something
}
@Override
public void onUserNameClick(Post post) {
// Do something
}
});