我的ListView
中有ListActivity
,其中有一个适配器充气。有一个Handler
,我称其postDelayed()
方法以refresh()
的递归方式运行ListView
(在notifyDataSetChanged()
的帮助下)。 postDealyed()
设置为1秒。
现在,ContextMenus
的所有项目/行都有ListView
。
我想使用此代码(获取“longpressed”行/项目的位置)将行/项目的背景与其ContextMenu
分开设置:
public boolean onContextItemSelected(MenuItem item) {
AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo();
...
case R.id.highlight:
ListView lv = (ListView)getListView();
View row = (View) lv.getChildAt(info.position);
row.setBackgroundColor(Color.argb(255, 22, 100, 100));
return true;
...
当我运行应用程序时,所选行的背景会发生变化(应该如此),但每秒(所以每次刷新ListView
时)它的另一行都会发生变化,所选行会变回其原始行州。又一秒后,一切都变回来。如果我滑过ListView
行的其他行也会闪烁。就像引用正在改变或我真的不知道。如果我停止滑动闪烁的背景有一个模式,直到下一张幻灯片获得另一个模式。
有什么想法吗? 提前谢谢!
答案 0 :(得分:1)
那是因为你的意见被回收了。您的“突出显示”代码需要更新列表项的支持模型并将其“突出显示”属性设置为true,它不应该直接更改View。当您渲染项目(在适配器中)时,检查此属性是否为真,如果是,则使用您指定的背景,否则将其设置为默认值。