我目前正在使用 ListView 来显示一种项目。我已经实现了一个动作模式来选择多个项目并大量删除,这在 android 4.x 中运行良好。但是当我尝试使用 API 版本 8 或 9 (android 2.2.x/2.3.x) 时,选择在内部按预期工作,但行项目的颜色是随机的。
如果用户选择第一行,则在内部选择第一行,但第 4 行是彩色的。当我单击另一行时,这一行和第一行是彩色的。这是一种奇怪的行为,我希望在 4.x 设备上正常工作。
长按覆盖以激活动作模式并检查 ListView 的长按项:
@Override
public boolean onItemLongClick(AdapterView<?> adapterView, View view, int position, long id) {
if (actionMode == null) {
listView.setOnItemClickListener(new CABClickListener());
actionMode = startActionMode(new ListActionMode());
// Check item pressed with long click
listView.setItemChecked(position, true);
view.setBackgroundColor(checkedColor);
logger.debug("Item at pos. " + position + ", checked.");
}
return true;
}
CABClickListener,负责勾选/取消勾选 ListView 的项目,在内部标记它们并改变它的背景颜色:
private final class CABClickListener implements AdapterView.OnItemClickListener {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int position, long id) {
if (listView.isItemChecked(position)) {
view.setBackgroundColor(checkedColor);
logger.debug("Item at pos. " + position + ", checked.");
} else {
view.setBackgroundColor(uncheckedColor);
logger.debug("Item at pos. " + position + ", unchecked.");
}
}
}
这些类/方法在 Activity 内部,listView
在其顶部声明。
更多注意事项:
- 使用 ActionBarSherlock(它显示了 CAB,但我认为这在这里并不重要)和 Roboguice,但我对此没有任何问题。
我一直在用模拟器开发。此外,我无法使用 android 3.x 尝试我的应用程序(此版本出现问题,模拟器无法启动),所以我不知道这些版本是否仍然存在问题。更新:在 android 3.0 API 11 中测试,在 4.x 上运行良好。- 我调试了代码,
View
两种方法中的 s 都可以,但是当我调用 时view.setBackgroundColor(checkedColor);
,另一个View
是彩色的。
有什么建议吗?希望任何人都可以提供帮助!