以下是我的问题:我的Activity
包含列出了不同位置的ListView
,以及带有这些位置标记的MapView
。
我现在想要的是,当点击其中一个MapView
标记时,要选择相应的ListView
项并发光(就像点击它一样)。
我找到了方法ListView.setSelection(int)
和ListView.requestChildFocus(View, View)
。第一个几乎完全符合我的要求(如果我有一个很长的列表,它会经过它直到项目可见)但它没有发光效果来显式显示该项目。关于第二个,我不确定第二个参数是什么(它是活动中先前关注的视图?)。
那么,有没有办法让项目发光?就像使用物理键盘选择它一样。
感谢。
编辑:附属问题,单击ListView项目时是否可以将标准drawable用作背景?是否可以在R.attr中找到listPreferredItemHeight
或其他什么?
答案 0 :(得分:5)
您要检查项目,而不是选择项目。这允许您使用StateListDrawable
来更改项目的外观,因为项目在处于触摸模式时不会保持选中状态。您必须将ListView
置于单一选择模式,使列表视图项可检查,并使用StateListDrawable
更改已检查项目的外观。
将ListView置于单选模式:
getListView().setChoiceMode(ListView.CHOICE_MODE_SINGLE);
然后,如果要突出显示ListView
中的项目,请执行以下操作:
getListView().setItemChecked(index, true);
我相信您行的布局的根项必须实现Checkable
,您应该能够在线找到CheckableRelativeLayout
或CheckableLinearLayout
的示例。
这使您的项目“已选中”,但您仍然需要让它发光,因此在您的行的布局中,您必须使用StateListDrawable
来更改其外观,方法是将其添加到布局:
android:background="@color/list_view_item_selector"
并创建一个color\list_view_item_selector.xml
文件,如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_checked="true" android:drawable="@color/selected_item" />
<item android:drawable="@android:color/transparent" />
</selector>