【发布时间】: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的方法?
标签: android listview custom-adapter