【发布时间】:2012-04-13 23:30:40
【问题描述】:
我有一个 ListView,我在其中使用 onListItemClick 事件更改所选项目的背景颜色:
@Override
public void onListItemClick(final ListView l, final View v, final int position, final long id)
{
v.setBackgroundColor(Color.GRAY);
}
是否可以在更改单个视图的背景颜色之前将 ListView 的所有行重置回原始颜色?问题是每个选定的项目都保留了它们的背景颜色,我只想改变用户点击的最新项目。
更新:
JRaymond 的响应似乎是最好的方法,但是,通常在使用 Android 布局时,我已将代码放入其中,但没有任何反应。没有办法调试它,没有错误消息,什么都没有。我绝对讨厌处理 Android 布局,它是处理 UI 的最复杂、最糟糕的实现设计。
无论如何,这就是我目前所拥有的:
列表视图:
<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 设置背景颜色。
【问题讨论】:
-
一切井井有条,您只需阅读文档
标签: android android-listview android-ui