我有一个这样的自定义列表视图项目:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:state_activated="true"
android:descendantFocusability="blocksDescendants"
android:orientation="horizontal">
<RelativeLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<ImageView
android:id="@+id/listicon_imageview"
android:layout_width="40dp"
android:layout_height="40dp"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:layout_marginTop="10dp"
android:layout_marginBottom="10dp"
android:layout_marginLeft="10dp"
android:scaleType="centerInside"
android:clickable="true"
android:src="@drawable/ic_launcher" />
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="20dp"
android:layout_alignTop="@+id/listicon_imageview"
android:layout_toRightOf="@+id/listicon_imageview"
android:text="Burnt offering"
android:textStyle="bold"
android:ellipsize="end"
android:singleLine="true"
android:textSize="16sp" />
</RelativeLayout>
</LinearLayout>
然后我设置了多种选择:
getListView().setChoiceMode(AbsListView.CHOICE_MODE_MULTIPLE_MODAL);
在我的CursorAdapter的bindItemViewHolder方法中,我为ImageView设置了监听器:
itemViewHolder.icon.setImageDrawable(drawable);
itemViewHolder.icon.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
int position = (int)view.getTag();
mListView.setItemChecked(position, !isPositionChecked(position));
}
});
单击ImageView后,整个列表项应突出显示,而一旦单击item iteself,将启动其他一些Activity。这类似于Gmail应用,用户点击图标以选择删除。这也是我所需要的。
但问题是,单击ImageView时我无法突出显示项目(光标/列表位置正确)。如何才能看到整个自定义列表项的突出显示?
答案 0 :(得分:0)
默认情况下,ListView
选择模式为NONE
。尝试将其更改为CHOICE_MODE_SINGLE
:
listview.setChoiceMode(ListView.CHOICE_MODE_SINGLE);
或xml:
<ListView
android:id="@+id/listView1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:choiceMode="singleChoice">
</ListView>
答案 1 :(得分:0)
我通过覆盖适配器中的getView解决了我的问题:
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View v = super.getView(position, convertView, parent);//let the adapter handle setting up the row views
v.setBackgroundColor(Color.TRANSPARENT); //default color
if (mSelection.get(position) != null) {
v.setBackgroundColor(Color.LTGRAY);// this is a selected position so make it red
}
return v;
}
取自Luksprog在Multiple selection in custom ListView with CAB中的回答(我投了票)。