ListView没有显示反馈

时间:2010-11-20 14:03:39

标签: android android-sdk-2.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.

现在?

3 个答案:

答案 0 :(得分: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中创建两个形状drawable,在/ res / drawable目录中,一个用于中性色,一个用于按下的颜色,以上面显示的方式
  • 像你一样创建一个可绘制的状态列表,但是在/ res / drawable目录中
  • 将其用作列表项的背景

答案 1 :(得分:0)

是和否。这不是你必须编写它,但你必须不禁用它。

如果您使用自定义视图来显示列表项,则必须放置一个drawable,允许您的视图在选中时提供反馈。例如,plainbitmap不会。

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

答案 2 :(得分:0)

我已经解决了这个问题。

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