[英]Chage button text after clicking it in android each listview item
我有一个使用自定义listAdapter设置的listview。 每个listView项目中都有一个“喜欢”按钮,供您点赞。 单击按钮后,我需要将此按钮的文本更改为“不喜欢”。 但是以下代码将所有项目按钮的文本更改为“不喜欢”。 如何解决。
@Override
public View getView(int position, View convertView, final ViewGroup parent) {
final HomeItem hi = itemsArrayList.get(position);
String type = hi.getType();
final ViewHolder viewHolder;
if(convertView==null) {
if(type.equalsIgnoreCase("Job")) {
convertView = mInflater.inflate(R.layout.home_row, null);
} else if(type.equalsIgnoreCase("Work")) {
convertView = mInflater.inflate(R.layout.home_row_work, null);
}
viewHolder = new ViewHolder();
viewHolder.pic = (ImageView) convertView.findViewById(R.id.pic);
viewHolder.lblCaptionName = (TextView) convertView.findViewById(R.id.caption_name);
viewHolder.lblCaptionText = (TextView) convertView.findViewById(R.id.caption_text);
viewHolder.lblCaptionItem = (TextView) convertView.findViewById(R.id.caption_item);
viewHolder.lblTime = (TextView) convertView.findViewById(R.id.time);
if(type.equalsIgnoreCase("Job")) {
JobViewHolder jobHolder;
jobHolder = new JobViewHolder();
jobHolder.lblCategory = (TextView) convertView.findViewById(R.id.category);
jobHolder.lblPost = (TextView) convertView.findViewById(R.id.post);
jobHolder.btnLike = (Button) convertView.findViewById(R.id.likeBtn);
viewHolder.jobViewHolder = jobHolder;
} else {
WorkViewHolder workHolder;
workHolder = new WorkViewHolder();
workHolder.lblTitle = (TextView) convertView.findViewById(R.id.title);
workHolder.lblDescription = (TextView) convertView.findViewById(R.id.description);
workHolder.btnLike = (Button) convertView.findViewById(R.id.likeBtn);
viewHolder.workViewHolder = workHolder;
}
convertView.setTag(viewHolder);
} else {
viewHolder = (ViewHolder) convertView.getTag();
}
viewHolder.lblCaptionName.setText(app.buildString(context, "<u>"+hi.getName()+"</u>",hi.getName()));
viewHolder.lblCaptionName.setMovementMethod(LinkMovementMethod.getInstance());
viewHolder.lblCaptionName.setLinkTextColor(Color.BLACK);
viewHolder.lblCaptionText.setText(hi.getCaption());
viewHolder.lblCaptionItem.setText(app.buildStringToOpenJobActivity(context, "<u>"+hi.getPost()+"</u>",hi.getUid()));
viewHolder.lblCaptionItem.setMovementMethod(LinkMovementMethod.getInstance());
viewHolder.lblCaptionItem.setLinkTextColor(Color.BLACK);
viewHolder.lblTime.setText(hi.getDate());
if(type.equalsIgnoreCase("Job")) {
if(viewHolder.jobViewHolder!=null) {
viewHolder.jobViewHolder.lblCategory.setText(hi.getJobItem().getCategory());
viewHolder.jobViewHolder.lblPost.setText(hi.getJobItem().getPost());
viewHolder.jobViewHolder.btnLike.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
viewHolder.jobViewHolder.btnLike.setText("Unlike");
}
});
}
} else if(type.equalsIgnoreCase("Work")) {
if(viewHolder.workViewHolder!=null) {
viewHolder.workViewHolder.lblTitle.setText(hi.getWorkItem().getTitle());
viewHolder.workViewHolder.lblDescription.setText(hi.getWorkItem().getDescription());
viewHolder.workViewHolder.btnLike.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
viewHolder.workViewHolder.btnLike.setText("Unlike");
}
});
}
}
if (hi.getImage() != null) {
viewHolder.pic.setImageBitmap(hi.getImage());
} else {
viewHolder.pic.setImageResource(R.drawable.user);
}
return convertView;
}
static class ViewHolder {
ImageView pic;
TextView lblCaptionName;
TextView lblCaptionText;
TextView lblCaptionItem;
TextView lblTime;
JobViewHolder jobViewHolder;
WorkViewHolder workViewHolder;
}
static class JobViewHolder {
TextView lblCategory;
TextView lblPost;
Button btnLike;
}
static class WorkViewHolder {
TextView lblTitle;
TextView lblDescription;
Button btnLike;
}
您需要在数据源中保存“ like status
。 ListView
的行在不可见时将被重用,因此,一旦您将其设置为“喜欢”,它就会被重新用于看起来也很喜欢的另一行。
只需添加一个类的成员叫liked
或类似于您的数据源类(似乎是HomeItem
你的情况),设置在onClickListener(您可能需要设置btnLike
的标签行索引,那么你知道你有哪些项目进行修改),然后在您的适配器上调用notifyDataSetChanged()
。
您还必须根据数据源项的值添加将行标记为喜欢的代码。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.