我的应用程序中有一个自定义列表视图,我想在其中使用 actionmode 实现删除多个元素。一个人可以通过长按一个项目来激活动作模式来选择多个项目,就像在 watsapp 中发生的那样。我可以选择多个项目,但我面临的问题是在更改所选列表项的背景时。我尝试了激活和选择模式,但它们正在更改我的列表项中随机元素的背景。滚动列表会改变随机项目的背景,并且它们在每次滚动时都会发生变化。我观察到的奇怪的事情。
我尝试以编程方式或使用 xml 更改背景,但在这两种情况下都发生了同样的事情。
我已应用于列表视图项目视图顶部元素的可绘制文件的代码
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true" android:drawable="@android:color/transparent"></item>
<item android:state_selected="true" android:drawable="@android:color/transparent"> </item>
<item android:state_focused="true" android:drawable="@android:color/transparent"></item>
<item android:state_activated="true" android:drawable="@color/holored"></item>
<item android:drawable="@drawable/list_view_item_shadow"></item>
</selector>
列表视图中的长按监听器
detailsListView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
@Override
public boolean onItemLongClick(AdapterView<?> adapterView, View view, int position, long id) {
view.setActivated(true);
onListItemSelect(position, view);
return true;
}
});
private void onListItemSelect(int position,View view) {
trasactionDetailAdapter.toggleSelection(position,view);
}
我正在使用 SparseBooleanArray 来检查项目选择,mSelectedItemsIds 是我的 SparseBooleanArray 对象。
在我的适配器里面:
public void toggleSelection(int position,View view) {
selectView(position, !mSelectedItemsIds.get(position), view);
}
public void selectView(int position, boolean value,View view) {
changeBackgroundColor(view,value);
notifyDataSetChanged();
}
private void changeBackgroundColor(View view,boolean hasSelectedItem){
if(hasSelectedItem){
int color=context.getResources().getColor(R.color.holoblue);
view.setBackgroundColor(color);
}else{
view.setBackgroundResource(R.drawable.listview_item_backgroundstate);
}
}
但即使我长按列表中的一项,此代码也会更改列表视图中多个随机项目的背景颜色,我是否传递了错误的视图来更改背景?