在ImageView单击时使用CursorAdapter突出显示listview中的选择

时间:2015-02-25 11:47:15

标签: android android-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>

然后我设置了多种选择:

    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时我无法突出显示项目(光标/列表位置正确)。如何才能看到整个自定义列表项的突出显示?

2 个答案:

答案 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中的回答(我投了票)。