我有一个扩展列表视图,其中包含了组中的一个按钮。当我点击按钮时,它应该保存与按钮相关的数据,并且还必须根据按钮的值重新绘制按钮。我现在面临的问题是,它不仅在重新绘制自己,而且还在重新绘制其他一些按钮。很难理解和解释正在发生的事情,因为它似乎随意地重新绘制任何按钮。请注意,保存部分工作正常。
有人能告诉我,下面的代码有什么问题吗?我唯一想做的就是重新绘制只点击的按钮,而不是扩展列表视图中的任何其他按钮。
groupHolder.Favourite.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View view) {
String itemKey = Holder.Favourite.getTag().toString();
Boolean starred = Client.data.get(itemKey.toLowerCase());
Client.writeStarred(view.getContext(), itemKey.toLowerCase(), starred);
if (starred)
((ImageButton) view).setImageDrawable(view.getContext().getResources().getDrawable(R.drawable.ic_cat_star_yellow));
else
((ImageButton) view).setImageDrawable(view.getContext().getResources().getDrawable(R.drawable.ic_cat_star));
}
});getGroupView的一部分
public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) {
GroupViewHolder Holder;
final GroupEvent group = (GroupEvent) getGroup(groupPosition);
if (group.Starred)
Holder.Favourite.setImageDrawable(convertView.getContext().getResources().getDrawable(R.drawable.ic_cat_star_yellow));
});我已经将代码更改为添加notifyDataSetChanged();,但这似乎也不起作用。
groupHolder.ButtonFavourite.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View view) {
String itemKey = gpHolder.ButtonFavourite.getTag().toString();
Boolean starred = Client.data.get(itemKey.toLowerCase());
Client.writeStarred(view.getContext(), itemKey.toLowerCase(), starred);
notifyDataSetChanged();
}
});发布于 2015-10-13 14:49:12
由于视图回收,视图正在随意重新绘制按钮。
对于适配器视图,事件处理程序应该用于更新模型状态和getView(),或者对于ExpandableListView、getGroupView()和getChildView(),应该根据该状态呈现视图。
在getGroupView()中,检查项目的星号,并相应地设置可绘制的图像。
确保将视图视为“脏”,因为它可能会被回收,并且每次都显式设置图像可绘制值:
public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) {
GroupViewHolder Holder;
final GroupEvent group = (GroupEvent) getGroup(groupPosition);
...
Holder.Favourite.setImageDrawable(convertView.getContext().getResources().getDrawable(
group.Starred ? R.drawable.ic_cat_star_yellow : R.drawable.ic_cat_star));
}https://stackoverflow.com/questions/33101950
复制相似问题