Android 单击ImageView时,使用光标或适配器高亮显示listview中的所选内容

Android 单击ImageView时,使用光标或适配器高亮显示listview中的所选内容,android,android-listview,Android,Android Listview,我有一个自定义listview项,如下所示: <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="blocksDescendant

我有一个自定义listview项,如下所示:

<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>
在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后,整个列表项目应高亮显示,而单击项目本身后,将启动其他一些活动。这类似于Gmail应用,用户点击图标选择删除。这也是我需要的

但是,问题是,我无法在单击ImageView时突出显示项目,因为光标/列表位置是正确的。如何查看整个自定义列表项上的突出显示?

默认情况下,ListView选择模式为“无”。尝试将其更改为CHOICE_MODE_SINGLE:

或在xml中:

<ListView
    android:id="@+id/listView1"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:choiceMode="singleChoice">
</ListView>

我通过在适配器中重写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在《我投赞成票》中的回答。

对不起,我忘了提到我称之为getListView.SetChoiceModelAbsListView.CHOICE\u MODE\u MULTIPLE\u MODAL的编程方式。我已经编辑了我的帖子
<ListView
    android:id="@+id/listView1"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:choiceMode="singleChoice">
</ListView>
    @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;
}