【发布时间】:2013-03-23 13:38:54
【问题描述】:
我有一个带有自定义适配器的 listView。选择时,我已使 listView 项目的背景更改颜色。这在三星 Galaxy S2 上的 Ice Cream Sandwich 4.0.4 和模拟器上的 ICS 4.0.3 上完美运行。但它不适用于 4.2.2 JellyBean 模拟器。在 JB 上,当一个项目被选中时,它的背景保持不变。
这是我的代码的一部分,其中我有在选择项目时设置背景颜色的逻辑:
private int mItemIndex = -1;
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View v = convertView;
....
if (convertView == null) {
....
....
} else {
/* To highlight the selected item */
if (position == mItemIndex) {
convertView.setSelected(true);
convertView.setPressed(true);
convertView.setBackgroundColor(context.getResources().getColor(R.color.SkyBlue));
} else {
convertView.setSelected(false);
convertView.setPressed(false);
convertView.setBackgroundColor(context.getResources().getColor(R.color.WhiteSmoke));
}
/* To highlight the selected item - end */
....
....
return v;
}
或者,我尝试过
convertView.setBackgroundResource(context.getResources().getColor(R.color.SkyBlue)); 而不是 setBackgroundColor,它也不起作用。
有没有一种解决方法可以让它在 Jellybean 上工作? 还是我在代码中遗漏了什么?
谢谢。
【问题讨论】:
-
您是否只需要更改颜色来突出显示 ListView 中的选定项?
-
@Pragnani,谢谢。我看到你告诉我有一个布尔数组来跟踪状态,但我不完全理解如何在我的场景中实现它。从我调用 listView 的活动中,
listView.setOnItemClickListener(new OnItemClickListener() {public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) { ((TransactionListAdapter)listView.getAdapter()).setSelectItem(arg2); } });和setSelectItem()将mItemIndex设置为传入的 arg2。我的适配器类中应该有布尔数组吗? -
@Maver1ck,是的,颜色变化会突出显示所选项目。我在操作栏上有按钮,我可以单击这些按钮对所选项目进行操作。
-
@RBK 同样的逻辑在这里适用......我会发布答案......
标签: android android-listview android-4.2-jelly-bean