Android listview项目背景更改

Android listview项目背景更改,android,listview,android-listview,onclick,position,Android,Listview,Android Listview,Onclick,Position,我有一个android列表视图。我想在单击一个listview项目时更改listview项目背景 然后上一个选中的项目必须返回默认背景。这意味着只需选择一项 我找了很久了。我可以使用onItemClick()更改所选项目的背景 但我无法更改以前选择的项目。例如,如果我选择第二个项目,则它已更改。然后我选择第三项。哦,我的上帝!它也变了!我能为此做些什么。我怎样才能得到以前的职位 这是我的android代码 private class ListViewItemClickListener imple

我有一个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);

        }
    }
私有类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>