我偶然发现了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.
现在?
答案 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/
目录中。
总结一下:
答案 1 :(得分:0)
是和否。这不是你必须编写它,但你必须不禁用它。
如果您使用自定义视图来显示列表项,则必须放置一个drawable,允许您的视图在选中时提供反馈。例如,plainbitmap不会。
最简单的方法是创建一个可绘制的状态列表,如下所示:
http://developer.android.com/guide/topics/resources/drawable-resource.html#StateList
列表视图条目的行为类似于示例中描述的按钮。如果您的背景可绘制包含state_pressed drawable,则在按下列表条目时应显示它。
答案 2 :(得分:0)