簡體   English   中英

在列表視圖中更改圖像按鈕的圖像

[英]Change Image of image button in list view

我檢查了Stackoverflow,有人問到要更改映像,但是沒有一個解決方案對我有幫助。

我在列表視圖的listItem中有一個ImageButton 我想在單擊ImageButton更改ImageButton的圖像。 它顯示的是吐司,但沒有改變圖像。

任何幫助,將不勝感激。 提前致謝。

下面是我的代碼...

public View getView(int position, View convertView, ViewGroup parent) {
    LayoutInflater inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    View rowView = inflater.inflate(R.layout.fragment_contacts_item_list, null);
    contactName = (TextView)rowView.findViewById(R.id.name_contact);
    contactNumber = (TextView)rowView.findViewById(R.id.number_contact);
    contactPic = (ImageView)rowView.findViewById(R.id.quickContactBadge_contact);
    contactStatusButton = (ImageButton)rowView.findViewById(R.id.configuration_button);
    convertView = rowView;

    contactArray = new ArrayList<ContactModel>();
    int status = contactList.get(position).getButtonStatus();
    if(status == 0)
        contactStatusButton.setImageResource(R.drawable.grey);
    else if(status == 1) //toggle button is on
        contactStatusButton.setImageResource(R.drawable.green);
    else
        contactStatusButton.setImageResource(R.drawable.red);

    contactStatusButton.setVisibility(View.VISIBLE);
    contactStatusButton.setBackgroundColor(Color.TRANSPARENT);
    contactStatusButton.setTag(position);
    contactStatusButton.setOnClickListener(new View.OnClickListener(){

        @Override
        public void onClick(View view) {
            int position = (Integer) view.getTag();
            model.setName(contactList.get(position).getName());
            model.setNumber(contactList.get(position).getNumber());
            model.setPhoto(contactList.get(position).getPhoto());

            ContactAdapter.contactArray.add(contactList.get(position));
            contactStatusButton.setImageResource(R.drawable.green);
            Toast.makeText(context, "contact Number: " + contactList.get(position).getNumber(), Toast.LENGTH_SHORT).show();

        }
    });

    model = new ContactModel(contactList.get(position).getName(), contactList.get(position).getNumber(), 0);
    model.setName(contactList.get(position).getName());
    model.setNumber(contactList.get(position).getNumber());
    model.setButtonStatus(contactList.get(position).getButtonStatus());

    Bitmap pic = Utilities.getPhoto(contactList.get(position).getPhoto());
    model.setPhoto(contactList.get(position).getPhoto());

    contactName.setText(contactList.get(position).getName());
    contactNumber.setText(contactList.get(position).getNumber());
    contactPic.setImageBitmap(pic);

    return convertView;

}

您的所有視圖似乎都被定義為封閉類的成員。 這意味着每當調用getView時,它們就會不斷地重新分配給不同的視圖。

相反,您應該在本地將視圖分配給該方法,並使其成為最終視圖,以便可以在單擊處理程序中引用它們:

final View rowView = inflater.inflate(R.layout.fragment_contacts_item_list, null);
final TextView contactName = (TextView)rowView.findViewById(R.id.name_contact);
final TextView contactNumber = (TextView)rowView.findViewById(R.id.number_contact);
final ImageView contactPic = (ImageView)rowView.findViewById(R.id.quickContactBadge_contact);
final ImageButton contactStatusButton = (ImageButton)rowView.findViewById(R.id.configuration_button);

您還會在點擊處理程序中對model犯同樣的錯誤。 您需要確保使用與該行關聯的模型,而不要在類成員中碰巧保留任何模型。

另外,您應該注意,您實際上並沒有回收行。 您每次都在創建新行。 這違反了ListView的主要目的之一,即不必為每一行創建新視圖。 您可能想要找到許多ListView教程之一,以幫助您正確地完成此操作。

我認為,更新視圖的圖像資源后,大多數可以解決使視圖無效的問題。 嘗試一下onClick():

@Override
    public void onClick(View view) {
        int position = (Integer) view.getTag();
        model.setName(contactList.get(position).getName());
        model.setNumber(contactList.get(position).getNumber());
        model.setPhoto(contactList.get(position).getPhoto());

        ContactAdapter.contactArray.add(contactList.get(position));
        contactStatusButton.setImageResource(R.drawable.green);
        contactStatusButton.invalidate(); //The View now needs to be redrawn
        Toast.makeText(context, "contact Number: " + contactList.get(position).getNumber(), Toast.LENGTH_SHORT).show();

    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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