我有一个
Android列表视图.我想在单击一个listview项目时更改listview项目背景.
然后,之前选择的项目必须返回默认背景.这意味着只需要选择一个项目.
我已经搜索了很长时间了.我可以使用onItemClick()更改所选项目的背景
但我不能改变以前选择的项目.例如,如果我选择第二个项目,它就会被更改.然后我选择第三项.哦,我的上帝!它也改变了!我能为此做些什么我怎么能得到以前的位置?
这是我的android代码.
private class ListViewItemClickListener implements AdapterView.OnItemClickListener { @Override public void onItemClick(AdapterView<?> parent,View view,int position,long id) { TextView title = (TextView) view.findViewById(R.id.title); title.setBackgroundResource(R.drawable.list_shape); } }
解决方法
当我在一个类似的例子中有这个时,我有一个名为的全局字段:
selectedListItem;
这将在您的onitemClickListener中更新,之前的项目将使其背景返回到默认值.
所以要更新你的代码:
private class ListViewItemClickListener implements AdapterView.OnItemClickListener { @Override public void onItemClick(AdapterView<?> parent,long id) { //First update the prevIoUsly selected item if one has been set if(selectedListItem!=null){ TextView prevIoUsTitle = (TextView) selectedListItem.findViewById(R.id.title); prevIoUsTitle.setBackgroundResource(R.drawable.list_default_background); } //Then update the new one TextView title = (TextView) view.findViewById(R.id.title); title.setBackgroundResource(R.drawable.list_shape); selectedListItem = view; } }
因此,只需将selectedListItem作为适配器中的字段,将onClickListener作为内部类,并使用默认背景drawable而不是list_default_background.
或者,您可以跟踪位置编号而不是实际视图.
编辑:
要将此方法用于列表,您还必须跟踪特定列表项的ID或对象实例.在我自己的解决方案中,在我的ListAdapter的getView方法中,我确保只更新与正确项目的ID /实例匹配的列表项.使用您的代码时,您还会发现当您向下滚动视图时,此可见项列表中的相同位置也会更新.这是因为列表视图引用了项目集中的列表,其中每个集合对应于任何时候屏幕上可见的项目.
要更新单个特定项目,您更适合使用其他答案中提到的选择器背景或指示器.
HTH