【发布时间】:2016-03-15 18:55:21
【问题描述】:
我在 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 每次系统需要重绘项目时都会被调用,因此您必须将项目的状态保存在某个持有者或哈希图中,调用 adapter.notifyDataSetChanged() 并向您的 getView 方法添加逻辑,例如 if (item[i].isClicked) imageButton.setImage(...) else imageButton.setItem(another_one);
-
感谢 Slavik 的建议,但这也无济于事。而且我没有单击该行,而是单击该行的按钮。
标签: android listview android-studio imagebutton baseadapter