1

我偶然发现了 ListViews 的一个奇怪问题。

在模拟器中,当按下项目进行选择时,ListView 不会显示任何反馈。我想我已经在现实中看到了这一点,但我不确定。我希望列表项在按下时被选中(较暗的背景),以便用户可以看到他按下了哪个项目。

我必须编码吗?

RG

看到评论后,我尝试了以下方法:

我创建了一个文件 res/color/backgroundstate.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_selected="true"
          android:color="#888"/>
    <item android:state_pressed="true"
          android:color="#888"/>
    <item android:color="#eee"/>
</selector>

然后我在 listitem.xml 中使用它作为背景色

<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:textColor="@color/helptextcolor"
    android:background="@color/backgroundstate"
    android:padding="10dp"
    android:textSize="16sp" >
</TextView>

当我显示 ListView 时

    ArrayAdapter adapter=new ArrayAdapter<String>(this,R.layout.listitem,names);
    LV.setAdapter(adapter);
    LV.invalidate();

程序崩溃。

有与此相关的三个例外。但问题似乎是最后一个XMLPullParserException:

<item> tag needs a drawable.

现在?

4

3 回答 3

2

<item>确实需要一个可绘制的,而不是颜色。为此,您需要一个可绘制的颜色,如下所示:

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
  <solid android:color="#FFFF0000" />
</shape>

...然后将其放入您的项目列表中。
此外,这是一个可绘制对象,因此它必须在/res/drawable-*目录中,而不是在/res/color/目录中。

把它们加起来:

  • (可选)将您的颜色放入带有名称的 /res/values/color.xml 文件中
  • 在xml中创建两个shape drawable,在/res/drawable目录下,一个为中性色,一个为压制色,如上图所示
  • 像你一样创建一个可绘制的状态列表,但是在 /res/drawable 目录中
  • 将其用作列表项的背景
于 2010-11-21T13:41:47.057 回答
0

是和不是。不是您必须对其进行编码,而是您不必禁用它。

如果您使用自定义视图来显示列表项,则必须放置一个可绘制对象,以允许您的视图在选择时提供反馈。例如,plainbitmap 没有。

最简单的方法是创建一个可绘制的状态列表,如下所示:http:
//developer.android.com/guide/topics/resources/drawable-resource.html#StateList
列表视图条目的行为类似于中描述的按钮这个例子。如果您的背景可绘制对象包含 state_pressed 可绘制对象,则应在按下列表条目时显示它。

于 2010-11-20T14:21:11.693 回答
0

我已经解决了这个问题。

见这里:http ://androidjava.wordpress.com/2010/11/22/listview-and-color-states/

于 2011-02-11T11:26:18.907 回答