当前位置: 首页 > 知识库问答 >
问题:

在Android上的ListView中突出显示选定的项目

龚睿
2023-03-14

我一直在制作一个可以在Android中使用ListView的应用程序,但我无法使所选(chacked)项具有不同的背景。我用的是CHOICE_MODE_SINGLE。到目前为止,我的代码是这样的:

我使用的列表视图:
(inside layout.xml

<ListView
    android:id="@+id/listView"
    android:layout_width="wrap_content"
    android:layout_height="match_parent"
    android:choiceMode="singleChoice"
    android:listSelector="@drawable/selector_test" >
</ListView>

我在适配器中使用的TextView布局:
(listItem.xml)

<TextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/listItem"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:textSize="23sp"
    android:textStyle="bold" />

这是我添加适配器的地方:

mListAdapter = new ArrayAdapter<String>(this, R.layout.listItem, mList);
mListView = (ListView) findViewById(R.id.listView);
mListView.setAdapter(mAuthorAdapter);
mListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
    @Override
    public void onItemClick(AdapterView<?> arg0, View arg1, int position, long arg3) {
        String selected = mList.get(position);
        // ...
        mListView.setItemChecked(position, true);
    }
});

我确信在单击时选中了正确的项,因为当我调用getCheckedItemPosition()时,它会返回正确的值。

现在,为了突出显示选中的项目,我尝试了两件事:

选择器可绘制:
(Selector_test.xml)

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" android:enterFadeDuration="@android:integer/config_longAnimTime">

    <item android:state_checked="true"><shape>
            <solid android:color="@color/red" />
        </shape></item>
    <item android:state_selected="true"><shape>
            <solid android:color="@color/blue" />
        </shape></item>
    <item android:state_pressed="true"><shape>
            <solid android:color="@color/green" />
        </shape></item>

</selector>

我把它添加到。包含以下内容的xml:

android:listSelector="@drawable/selector_test"

背景可绘制:
(Background_test.xml)

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:drawable="@color/red" android:state_checked="true"/>
    <item android:drawable="@color/blue" android:state_selected="true"/>
    <item android:drawable="@color/green"/>

</selector>

我把它添加到。包含以下内容的xml:

android:background="@drawable/background_test"

我已经尝试将选择器和背景添加到两个listView中。xml和listItem。xml,但唯一改变的是默认背景颜色,以及按下(或按住)项目时选择器的颜色
android:state_checked=“true”和android:state_selected=“true”似乎什么都不做

我可以通过覆盖ArrayAdapter中的getView()方法来更改背景,如果选择了视图,则在其中调用setBackgroundColor(),并且它确实更改了背景,但也完全取消了选择器。此外,我真的不喜欢仅仅为了更改一行代码而重写类,尤其是如果同样的事情可以通过不同的方式实现的话

所以我想问的是,是否有一种方法可以通过添加选择器或背景绘图来突出显示ListView中的选中项,而我只是做错了,或者我必须以其他方式使其工作

提前感谢!:)

共有3个答案

唐骏祥
2023-03-14

编程方式使用setSelector。例如:

lv.setSelector(R.color.abc_background_cache_hint_selector_material_dark);
濮彬
2023-03-14

试试这个:

listViewDay.setItemChecked(position, true);
listViewDay.setSelection(position);

列表项。xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="40dp"
    android:background="@drawable/list_day_selector" >

    <TextView
        android:id="@+id/txtItemDay"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:gravity="center_vertical|center_horizontal"
        android:text="22"
        android:textColor="@android:color/white"
        android:textSize="22sp" />

</LinearLayout>

列出你的选择。xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:drawable="@drawable/list_item_bg_normal" android:state_activated="false"/>
    <item android:drawable="@drawable/bg_with_left_arrow" android:state_pressed="true"/>
    <item android:drawable="@drawable/bg_with_left_arrow" android:state_activated="true"/>

</selector>
童铭晨
2023-03-14

在活动开始时添加此行

lv.setChoiceMode(ListView.CHOICE_MODE_SINGLE);

其中lv是listView的实例

然后重写此方法并向其添加以下行。

 @Override
public void onListItemClick(ListView l, View v, int position, long id) {


    // Set the item as checked to be highlighted 
    lv.setItemChecked(position, true);
            v.setBackgroundColor(Color.BLUE);

        conversationAdapter.notifyDataSetChanged();

}

然后在自定义适配器的getView方法中将上一个选定项的背景颜色更改回正常

 类似资料:
  • 问题内容: 我有两个,一个包含一个由选择查询()填充的客户端列表,另一个包含选定的客户端的详细信息()。我想在显示细节的同时让客户保持选中状态。 XML: Java: 问题答案: 若要在按下时保持列表视图项目的颜色,请在列表视图项目布局中包括以下行: 然后在这样的文件夹中定义: 最后,将此包含在你的中: 这样,在任何时候都只能选择一项。你可以使用以下方式定义颜色值res/values/colors

  • 我有一个Gridview,当我按下某个元素时,我想绘制背景。 我有一个适配器来动态加载gridview元素。我在适配器上有一个侦听器。在这个侦听器上,我用我想要的颜色放置背景,但它也会在列表中绘制另一个元素(我猜是在视图重新加载后,位置相同的元素)。 重要提示:我的最小API是9,我无法真正更改它。 以下是我的 getView 方法的代码(来自适配器): 下面是线性布局的侦听器(表示每个项目):

  • 我使用gridview在我的gridview中选择多个项目(图像)。 我使用< code > MultiChoiceModeListener 来实现这一点,问题是选中的项目没有突出显示 选择器xml: 当我触摸一个项目时,它被蓝色覆盖(我认为这是因为我使用了< code > GridView . setdrawselectorontop(true);)...我一抬起手指,蓝色就消失了。 我希望选择

  • 实际行为 预期行为 至于我使用的代码,主加载了一个,其中调度页是真正的罪魁祸首,扩展了Xamarin.Forms.TabbedPage。SelectedPage被正确设置(加载正确的contentpage),但选项卡没有突出显示。 null

  • 问题内容: 我必须为ListView项添加另一种突出显示颜色。我为项目使用自定义适配器,并且我有以下代码: 布局: 项目布局代码: 选择器代码: color.xml的代码: 但是我有一个问题:ListView项不会通过单击更改颜色!始终为白色。我在哪里弄错了? 问题答案: 这是您的操作方式: 首先,在您的中,输入以下内容: 这使您的listSelector(单击列表视图时通常看到的颜色)透明。 接

  • 问题内容: 我找不到能帮助我解决Angular中这个简单问题的东西。与位置路径进行比较时,所有答案都与导航栏相关。 我使用list和构建了一个动态表。当我单击一行时,我试图为该行分配一个css类(选中),以突出显示该行已被用户选中的事实,并从先前突出显示的行中删除了该行。 我缺少在选定的行和CSS类分配之间进行绑定的方法。 我在每个()上应用了代码, 但我缺少应用更改的逻辑。 我的代码-Plunk