项目中需要列表中选中的项保持高亮,在网上搜了一下,大部分文章提到的都是下面这种方法:
借助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
这样就可以了,具体原理未知。
还希望有达人能解惑。