Gridview OnItemClickListener无法使用cardView

时间:2016-07-29 09:08:23

标签: android android-fragments gridview android-cardview onitemclicklistener

我想为我的gridView实现OnItemClickListener

我在我的片段中定义了这样的监听器:

    GridView gridview = (GridView)view.findViewById(R.id.gridview);
    gridview.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            Log.d("imagedata","Position clicked: "+ position);
        }
    });

    List<ItemObject> allItems = ((MainActivity) getActivity()).getTinkeractivities(); //getJSON data
    CustomAdapter customAdapter = new CustomAdapter(getActivity(), allItems, "home");
    gridview.setAdapter(customAdapter);

gridView中每个项目的我的布局如下:

<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:card_view="http://schemas.android.com/apk/res-auto"
android:id="@+id/card_view"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:clickable="false"
card_view:cardUseCompatPadding="true"
card_view:cardCornerRadius="4dp"
card_view:cardElevation="4dp">

<RelativeLayout
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:padding="8dp">

    <ImageView
        android:id="@+id/screen_shot"
        android:layout_width="80dp"
        android:layout_height="80dp"
        android:contentDescription="@string/hello_world"
        android:layout_alignParentTop="true"
        android:scaleType="centerCrop"
        android:layout_centerHorizontal="true"/>

    <TextView
        android:id="@+id/activity_name"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/screen_shot"
        android:layout_alignLeft="@+id/screen_shot"
        android:text="@string/hello_world"
        android:inputType="text"
        android:textColor="#000"
        android:layout_marginTop="8dp"
        android:textSize="12sp"/>

    <TextView
        android:id="@+id/theme_name"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/activity_name"
        android:layout_alignLeft="@+id/activity_name"
        android:text="@string/hello_world"
        android:textSize="12sp"
        android:layout_marginTop="4dp"/>

</RelativeLayout>
</android.support.v7.widget.CardView>

但是,点击监听器似乎不起作用。我尝试在卡片视图的所有子视图中将android:clickable设置为false,并尝试在卡片视图上将其设置为false,但没有成功。

我能够在CustomAdapter中为每个行视图成功设置一个点击监听器,但我不想采用这种方法,因为我想在我的custom action bar上进行一些批量选择gridview使用标准实现。否则,我将不得不处理longPress事件,并为我的行项目设置checked状态,然后努力从适配器中实现自定义操作栏。

要实现干净的实现,我想在片段中定义click侦听器。我在Stackoverflow上阅读了几篇博文和相关答案,所有这些都建议采用适配器方法,并且没有指定如何以正确的方式使其在活动或片段中工作。

我想知道在我的案例中是否无法设置OnItemClickListener。如果不是,那么我该如何调试并解决问题呢?

1 个答案:

答案 0 :(得分:2)

您可以尝试添加

android:descendantFocusability="blocksDescendants"

到您的网格项目

编辑:

否则,如果您有可以阻止可以添加的点击的按钮:

android:focusable="false"
android:focusableInTouchMode="false"