3

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

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

我找到了方法ListView.setSelection(int)ListView.requestChildFocus(View, View). 第一个几乎完成了我想要的(如果我有一个很长的列表,它会遍历它直到项目可见),但它缺少显式显示项目的发光效果。关于第二个,我不确定第二个参数是做什么用的(它是活动中先前关注的视图?)。

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

谢谢。

编辑:附属问题,是否可以在单击 ListView 项目时将标准可绘制对象用作背景?它可以在 R.attr 之类的listPreferredItemHeight东西中找到吗?

4

1 回答 1

5

您不想让项目被选中,而是让它们被选中。这允许您使用 aStateListDrawable更改项目的外观,因为项目在处于触摸模式时不会保持选中状态。您必须ListView进入单选模式,使您的列表视图项目可检查,并使用StateListDrawable更改已检查项目的外观。

要将您的 ListView 置于单选模式:

getListView().setChoiceMode(ListView.CHOICE_MODE_SINGLE);

然后,当您想突出显示 中的某个项目时ListView,请执行以下操作:

getListView().setItemChecked(index, true);

我相信你的行布局的根项必须实现Checkable,你应该可以在网上找到CheckableRelativeLayout例子CheckableLinearLayout

这会使您的项目“被选中”,但您仍然需要使其发光,因此在您的行的布局中,您必须使用 aStateListDrawable在检查时通过将其添加到布局来更改其外观:

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>
于 2011-03-30T14:16:20.920 回答