[英]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.