从代码中生成ListView项目

时间:2011-03-30 12:54:45

标签: android listview glow

以下是我的问题:我的Activity包含列出了不同位置的ListView,以及带有这些位置标记的MapView

我现在想要的是,当点击其中一个MapView标记时,要选择相应的ListView项并发光(就像点击它一样)。

我找到了方法ListView.setSelection(int)ListView.requestChildFocus(View, View)。第一个几乎完全符合我的要求(如果我有一个很长的列表,它会经过它直到项目可见)但它没有发光效果来显式显示该项目。关于第二个,我不确定第二个参数是什么(它是活动中先前关注的视图?)。

那么,有没有办法让项目发光?就像使用物理键盘选择它一样。

感谢。

编辑:附属问题,单击ListView项目时是否可以将标准drawable用作背景?是否可以在R.attr中找到listPreferredItemHeight或其他什么?

1 个答案:

答案 0 :(得分:5)

您要检查项目,而不是选择项目。这允许您使用StateListDrawable来更改项目的外观,因为项目在处于触摸模式时不会保持选中状态。您必须将ListView置于单一选择模式,使列表视图项可检查,并使用StateListDrawable更改已检查项目的外观。

将ListView置于单选模式:

getListView().setChoiceMode(ListView.CHOICE_MODE_SINGLE);

然后,如果要突出显示ListView中的项目,请执行以下操作:

getListView().setItemChecked(index, true);

我相信您行的布局的根项必须实现Checkable,您应该能够在线找到CheckableRelativeLayoutCheckableLinearLayout的示例。

这使您的项目“已选中”,但您仍然需要让它发光,因此在您的行的布局中,您必须使用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>