我有一个Android列表视图。我想在单击一个列表视图项目时更改列表视图项目背景。
然后上一个选定的项目必须返回默认背景。这意味着只需要选择一个项目。
我已经搜索了很长时间了。我可以使用onItemClick()
更改所选项目的背景但我无法更改以前选择的项目。例如,如果我选择第二个项目,它就会被更改。然后我选择第三项。哦,我的上帝!它也改变了!我能为此做些什么我怎么能得到以前的位置?
这是我的安卓代码。
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);
}
}
答案 0 :(得分:4)
您应该使用内置方法在列表视图中选择项目。您发现,手动更改背景很容易出错。
将此属性添加到listview项目xml
中的根视图android:background="?android:attr/activatedBackgroundIndicator"
然后在ListView上调用setItemChecked(x, true)
,其中x是您要选择的项目的位置。
确保您的列表视图具有允许选择的ChoiceMode
集(例如“SingleChoice”)
答案 1 :(得分:1)
当我在一个类似的例子中有这个时,我有一个名为的全局字段:
selectedListItem;
这将在您的onitemClickListener中更新,之前的项目将使其背景返回到默认值。
所以要更新你的代码:
private class ListViewItemClickListener implements
AdapterView.OnItemClickListener {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position,
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
作为内部类,并使用默认背景绘制而不是list_default_background
。
或者,您可以跟踪位置编号而不是实际视图。
编辑:
要将此方法用于列表,您还必须跟踪特定列表项的ID或对象实例。在我自己的解决方案中,在我的ListAdapter的getView方法中,我确保只更新与正确项目的ID /实例匹配的列表项。使用您的代码时,您还会发现当您向下滚动视图时,此可见项列表中的相同位置也会更新。这是因为列表视图引用了项目集中的列表,其中每个集合对应于任何时候屏幕上可见的项目。
要更新单个特定项目,您最好使用其他答案中提到的选择器背景或指示器。
HTH
答案 2 :(得分:1)
您可以在单击时更改ListView项目颜色,如下所示。请按照以下步骤操作。
(请记住,这是自定义列表视图)
在Drawable Folder中创建一个XML文件,如下所示:
<item android:drawable="@color/orange" android:state_focused="true"/>
<item android:drawable="@color/orange" android:state_pressed="true"/>
<item android:drawable="@drawable/listview"></item>
选择自己的资源。
在实现Custom ListVIew时,您将拥有自定义列表项设计的其他布局。下面是这样一个例子。
<ImageView
android:id="@+id/imageView1"
android:layout_width="60dp"
android:layout_height="60dp" />
<TextView
android:id="@+id/textView1"
android:layout_width="fill_parent"
android:layout_height="60dp"
android:layout_toRightOf="@+id/imageView1"
android:background="@drawable/listselect_picture"
android:gravity="center"
android:text="TextView"
android:textColor="@drawable/select_txtcolor"
android:textSize="16sp" />
在上面的代码中,我将第1步中的XML文件设置为“background”属性。这将按你的意愿工作。
此外,如果您还想更改ListItem选择的文本颜色,请使用以下XML代码并将该XML文件设置为“TextColor”属性。
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_selected="true" android:color="@android:color/white"/>
<item android:state_focused="true" android:color="@android:color/white"/>
<item android:state_pressed="true" android:color="@android:color/white"/>
<item android:color="@android:color/black"/>
</selector>
上面的代码会将文本颜色更改为选择时的文本颜色,并在未单击时恢复为原始颜色。