Android ListView保持选中项高亮

分享到:

项目中需要列表中选中的项保持高亮,在网上搜了一下,大部分文章提到的都是下面这种方法:

借助Listview的Tag属性.

OnItemClickListener listviewMemuOnItemClickListener = new OnItemClickListener() {

@Override

public void onItemClick(AdapterView<?> parent, View view,

int position, long id) {

if (((ListView) parent).getTag() != null) {

((View) ((ListView) parent).getTag())

.setBackgroundDrawable(null);

}

((ListView) parent).setTag(view);

view.setBackgroundResource(R.drawable.listitem_bk);

}

});

最初的出处没有去追踪......

试了一下确实可以达到目的,但是似乎有个Bug:当列表中内容比较多,然后在界面向下滚动“翻页”时会发现每页都一项被高亮了,可能和tag有关。

这里提供另一种保持高亮的方法:

在包含ListView的布局文件中加入一个空的LinearLayout,以我的main.xml为例:

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

android:orientation="vertical" android:layout_width="fill_parent"

android:layout_height="fill_parent">

<LinearLayout android:layout_width="fill_parent"

android:layout_height="wrap_content" android:focusableInTouchMode="true">

</LinearLayout>

<ListView android:id="@+id/listView" android:layout_width="fill_parent"

android:layout_height="wrap_content"></ListView>

</LinearLayout>

然后在onItemClick中加入

listView.clearFocus();

listView.requestFocusFromTouch();

其中listView是你用findViewById获得的ListView

这样就可以了,具体原理未知。

还希望有达人能解惑。

昵    称:
验证码:

相关文档: