在我更新列表视图中所选项目的背景颜色后,如果我滚动背景更改为随机项目并且它也选择了多个项目,为啥?
Posted
技术标签:
【中文标题】在我更新列表视图中所选项目的背景颜色后,如果我滚动背景更改为随机项目并且它也选择了多个项目,为啥?【英文标题】:After i update background color of selected item in listview, if i scroll background changes to random item and it selects multiple items too, why?在我更新列表视图中所选项目的背景颜色后,如果我滚动背景更改为随机项目并且它也选择了多个项目,为什么? 【发布时间】:2019-01-21 10:54:54 【问题描述】:我的代码:
ArrayList<Integer> selectedItemIds = new ArrayList<>();
boolean isItemSelected = false;
main_listview.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener()
@Override
public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id)
Object object = parent.getItemAtPosition(position);
if(object instanceof Listview_Item_Details)
TextView itemName = (TextView) view.findViewById(R.id.listview_itemName);
TextView itemDetails = (TextView) findViewById(R.id.listview_itemDetails);
if(!selectedItemIds.isEmpty())
for(int i = 0; i < selectedItemIds.size();i++)
if(selectedItemIds.get(i) == position)
isItemSelected = true;
if(selectedItemIds.size() == 1)
selectedItemIds.clear();
else
selectedItemIds.remove(i);
if(isItemSelected)
view.findViewById(R.id.custom_listview_item).setBackgroundResource(R.drawable.listview_item_background);
itemName.setTextColor(getResources().getColor(R.color.colorBlack));
itemDetails.setTextColor(getResources().getColor(R.color.colorGray_Dark));
isItemSelected = false;
else
selectedItemIds.add(position);
view.findViewById(R.id.custom_listview_item).setBackgroundResource(R.drawable.listview_selected_item_background);
itemName.setTextColor(getResources().getColor(R.color.colorWhite));
itemDetails.setTextColor(getResources().getColor(R.color.colorPrimaryDark));
else
selectedItemIds.add(position);
view.findViewById(R.id.custom_listview_item).setBackgroundResource(R.drawable.listview_selected_item_background);
itemName.setTextColor(getResources().getColor(R.color.colorWhite));
itemDetails.setTextColor(getResources().getColor(R.color.colorPrimaryDark));
return true;
);
注意:“custom_listview_item”是item的自定义布局的RelativeLayout,两个textview都在其中。
现在一切正常,但就像我在问题中所说的那样,如果我不滚动列表视图并选择/取消选择多个项目,它可以工作,但我滚动它会随机更改多个项目的背景,甚至更改所选项目的背景。
这里有什么问题?
【问题讨论】:
不要更改ItemClick
内的项目视图属性。在适配器的getView()
内执行此操作。在ItemClick
中仅对数据集进行更改并通知适配器。
Recyclerview 重复使用他的所有单元格以提高性能,您必须将原始背景颜色明确设置为未点击的单元格。
@ADM 你的意思是创建覆盖适配器getView的方法?
【参考方案1】:
使用Recyclerview
而不是Listview
来处理这种情况并自定义视图项。
【讨论】:
以上是关于在我更新列表视图中所选项目的背景颜色后,如果我滚动背景更改为随机项目并且它也选择了多个项目,为啥?的主要内容,如果未能解决你的问题,请参考以下文章