Android listview项目背景更改
我有一个android列表视图。我想在单击一个listview项目时更改listview项目背景 然后上一个选中的项目必须返回默认背景。这意味着只需选择一项 我找了很久了。我可以使用onItemClick()更改所选项目的背景 但我无法更改以前选择的项目。例如,如果我选择第二个项目,则它已更改。然后我选择第三项。哦,我的上帝!它也变了!我能为此做些什么。我怎样才能得到以前的职位 这是我的android代码Android listview项目背景更改,android,listview,android-listview,onclick,position,Android,Listview,Android Listview,Onclick,Position,我有一个android列表视图。我想在单击一个listview项目时更改listview项目背景 然后上一个选中的项目必须返回默认背景。这意味着只需选择一项 我找了很久了。我可以使用onItemClick()更改所选项目的背景 但我无法更改以前选择的项目。例如,如果我选择第二个项目,则它已更改。然后我选择第三项。哦,我的上帝!它也变了!我能为此做些什么。我怎样才能得到以前的职位 这是我的android代码 private class ListViewItemClickListener imple
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);
}
}
私有类ListViewItemClickListener实现
AdapterView.OnItemClickListener{
@凌驾
public void onItemClick(AdapterView父视图、视图、整型位置、,
长id){
TextView title=(TextView)view.findViewById(R.id.title);
标题.挫折资源(R.可绘制.列表形状);
}
}
当我在一个类似的示例中使用此字段时,我有一个全局字段,名为:
selectedListItem;
这将在您的McClickListener中更新,然后上一个项目的背景将返回到默认值
因此,要更新您的代码:
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;
}
}
私有类ListViewItemClickListener实现
AdapterView.OnItemClickListener{
@凌驾
public void onItemClick(AdapterView父视图、视图、整型位置、,
长id){
//如果已设置项目,则首先更新先前选择的项目
如果(selectedListItem!=null){
TextView previousTitle=(TextView)selectedListItem.findViewById(R.id.title);
previousTitle.setBackgroundResource(R.drawable.list\u default\u background);
}
//然后更新新的
TextView title=(TextView)view.findViewById(R.id.title);
标题.挫折资源(R.可绘制.列表形状);
selectedListItem=视图;
}
}
因此,只需将selectedListItem
初始化为适配器中的一个字段,将onClickListener
作为一个内部类,并使默认背景可绘制,而不是list\u default\u background
或者,您可以跟踪位置编号,而不是实际视图
编辑:
要在列表中使用此方法,还必须跟踪特定列表项的ID或对象实例。在我自己的解决方案中,在ListAdapter的getView方法中,我确保只更新与正确项的ID/实例匹配的列表项。按照代码的方式,您还将发现,当您向下滚动此可见项列表中相同位置的视图时,视图也会更新。这是因为列表视图指的是一组项目中的列表,其中每一组对应于屏幕上随时可见的项目
要更新单个特定项目,您最好使用其他答案中提到的选择器背景或指示器
HTH您应该使用内置的方法在列表视图中选择项目。正如您所发现的,手动更改背景容易出错 将此属性添加到listview项xml的根视图中
android:background="?android:attr/activatedBackgroundIndicator"
然后在ListView上调用setItemChecked(x,true)
,其中x是要选择的项目的位置
确保您的listview具有允许选择的
选项模式集(如“SingleChoice”)单击listview项可以更改其颜色,如下所示。遵循以下步骤
(请记住,这是用于自定义列表视图)
在Drawable文件夹中创建XML文件,如下所示:
选择你自己的资源
在实现自定义ListVIew时,您将拥有用于自定义列表项设计的附加布局。下面就是这样一个例子
在上面的代码中,我将步骤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>
上面的代码将在选择时将文本颜色更改为while,在取消选择时将恢复为原始颜色。我只想写与注释相同的内容:)Hi Selvin。这将解决OP提出的问题。重新应用到每个可见列表的视图背景问题是一个单独的问题,由初始方法引起。不,它不会。。。因为listview正在重用项!如果您“选择”项目,请从可见项目1中滚动此项目。可以“选择”其他一些项目2。如果将此项目滚动回可见项目,则可能不会再次选择此项目!故事的结尾是的,但那是另一个问题。用户询问如何在选择我的回答正确的新项目时取消选择上一个项目。我相信你的评论属于以下问题:)
<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" />
<?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>