簡體   English   中英

在android每個listview項中單擊后的Chage按鈕文本

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM