Android:setOnClickListener不适用于GridView

时间:2016-01-07 07:58:35

标签: android gridview

您好我为GridView父

实现了setOnClickListener

代码:

主要布局

<LinearLayout
            android:id="@+id/profile_ll_friends"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentRight="true"
            android:descendantFocusability="blocksDescendants"
            android:background="@drawable/linear_layout_border"
            android:orientation="vertical" >

            <ImageView
                android:id="@+id/profile_img_friends"
                android:layout_width="@dimen/profile_img_apf_width"
                android:layout_height="@dimen/profile_img_apf_height"
                android:layout_gravity="center_horizontal"
                android:contentDescription="@string/cont_desc"
                android:scaleType="fitXY"
                android:src="@drawable/bg_480_800"
                android:visibility="gone" />

            <GridView
                android:id="@+id/friends_photos_gv"
                android:layout_width="@dimen/profile_img_apf_width"
                android:layout_height="@dimen/profile_img_apf_height" >
            </GridView>

            <TextView
                android:id="@+id/profile_tv_friends"
                android:layout_width="@dimen/profile_img_apf_width"
                android:layout_height="@dimen/txt_size_height_profile"
                android:layout_gravity="center_horizontal"
                android:layout_marginTop="0dp"
                android:background="@color/txt_common_white"
                android:gravity="center"
                android:text="@string/txt_Friends"
                android:textColor="@color/txt_common_black"
                android:textSize="@dimen/txt_size" />
        </LinearLayout>

活动

LinearLayout friendsLayout = (LinearLayout) findViewById(R.id.profile_ll_friends);

friendsLayout.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {

                Intent intent = new Intent(ProfileActivity.this, FriendsListActivity.class);
                startActivity(intent);
            }
        });

适配器布局

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <ImageView
        android:id="@+id/friends_photos_img"
        android:layout_width="20dp"
        android:layout_height="20dp"
        android:layout_gravity="center_horizontal"
        android:contentDescription="@string/cont_desc"
        android:scaleType="fitXY"
        android:src="@drawable/bg_480_800"
        android:visibility="visible" />

</LinearLayout>

单击TextView(profile_tv_friends)区域时,setOnClickListener正常工作但单击GridView(friends_photos_gv)区域时,setOnClickListener无法正常工作

对于这个问题,我试过

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

适用于适配器布局中的ImageView(friends_photos_img)并尝试了

android:descendantFocusability="blocksDescendants"

对于LinearLayout(profile_ll_friends),但是单击GridView区域时setOnClickListener不起作用

3 个答案:

答案 0 :(得分:1)

您应该使用:

friendlayout.setOnItemClickListener(new OnItemClickListener() {
    @Override
    public void onItemClick(AdapterView<?> parent, View v,
            int position, long id) {

        // DO something

    }
});

答案 1 :(得分:1)

Gridview就像列表视图一样可以尝试这样的事情。

    gridView.setOnItemClickListener(new OnItemClickListener() {
    @Override
    public void onItemClick(AdapterView<?> parent, View v,
            int position, long id) {

        // DO something

    }
    });

有关详细信息,请查看此链接。 GridView

另一个错误可能是你在这里引用了linearlayout而不是实际的GridView。

LinearLayout friendsLayout = (LinearLayout)   findViewById(R.id.profile_ll_friends);

答案 2 :(得分:0)

替换:

friendsLayout.setOnClickListener(new OnClickListener() {

使用:

friendsLayout.setOnClickListener(new View.OnClickListener() {