gpt4 book ai didi

android-listview - 在 ListView 中重置背景颜色

转载 作者:行者123 更新时间:2023-11-29 02:05:45 24 4
gpt4 key购买 nike

我有一个 ListView,我在其中使用 onListItemClick 事件更改所选项目的背景颜色:

@Override
public void onListItemClick(final ListView l, final View v, final int position, final long id)
{
v.setBackgroundColor(Color.GRAY);
}

是否可以在更改单个 View 的背景颜色之前将 ListView 的所有行重置回原始颜色?问题是每个选定的项目都保留了它们的背景颜色,我只希望用户点击的最新项目发生变化。

更新:

JRaymond 的回应似乎是最好的方法,但是,在使用 Android 布局时,这很常见,我将代码放入其中但没有任何反应。无法调试它,没有错误消息,什么都没有。我绝对讨厌处理 Android 布局,它是处理 UI 时最复杂、实现最糟糕的设计。

无论如何,这是我目前所拥有的:

ListView :

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
>

<ListView android:id="@android:id/list"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:choiceMode="singleChoice"
android:listSelector="@drawable/listing_selector"
/>

<TextView android:id="@android:id/empty"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:padding="5dp"
/>

</LinearLayout>

listing_selector.xml

<?xml version="1.0" encoding="utf-8"?>

<selector xmlns:android="http://schemas.android.com/apk/res/android" >

<item android:state_focused="true" android:drawable="@android:color/transparent" />

<item android:state_pressed="true" android:drawable="@android:color/transparent" />

<item android:state_selected="true" android:state_activated="true" android:drawable="@android:color/black" />

<item android:state_activated="true" android:drawable="@android:color/transparent" />

<item android:state_selected="true" android:drawable="@android:color/transparent" />

<item android:drawable="@android:color/transparent" />

</selector>

正如我所说,当我点击项目时没有任何反应,甚至内置的突出显示也消失了。我什至尝试将所有颜色更改为黑色,但没有任何反应。

更新 2:

我越来越近了。看完this文章中,您必须将selector xml 放在res 下名为color 的文件夹中,然后设置selector作为 ListView 中每个项目布局中的背景,而不是 ListView 本身:

<?xml version="1.0" encoding="UTF-8"?>

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:orientation="horizontal"
android:background="@color/listing_selector"
>
<TextView
android:id="@+id/text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>

</RelativeLayout>

当我触摸 ListView 中的每个项目时,我看到背景颜色会闪烁,但是,它们不会停留并恢复为原始背景颜色。这是我正在使用的选择器:

<?xml version="1.0" encoding="utf-8"?>

<selector xmlns:android="http://schemas.android.com/apk/res/android">

<item android:state_selected="false" android:state_pressed="false" android:drawable="@android:color/transparent" />

<item android:state_pressed="true" android:drawable="@color/blue" />

<item android:state_selected="true" android:state_pressed="false" android:drawable="@color/blue" />

</selector>

颜色.xml:

<?xml version="1.0" encoding="UTF-8"?>

<resources>
<color name="blue">#ff33b5e5</color>
</resources>

这实在是太让人头疼了。想出这个糟糕的 UI 处理系统的人应该被解雇。

解决方案:

不能 100% 确定,但这可能只适用于 Android 3.0+ 设备。 state_activated 是用来设置背景颜色的。

最佳答案

您正在寻找的是 stateListDrawable(也称为选择器)和 choiceMode 的组合。

在您的 drawables 文件夹中包含一个像这样的 xml(我使用其他 drawables 作为我的背景,但颜色也一样):

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" >
<item android:state_focused="true"
android:drawable="@drawable/list_item_pressed" />
<item android:state_pressed="true"
android:drawable="@drawable/list_item_pressed" />
<item android:state_selected="true"
android:state_activated="true"
android:drawable="@drawable/list_item_selected" />
<item android:state_activated="true"
android:drawable="@drawable/list_item_selected" />
<item android:state_selected="true"
android:drawable="@android:color/black" />
<item android:drawable="@android:color/transparent" />
</selector>

然后将 ListView 的 choiceMode 设置为 singleChoice

<ListView
...
android:choiceMode="singleChoice"

这让操作系统为您处理背景。

关于android-listview - 在 ListView 中重置背景颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10149581/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com