【问题标题】:GridView.setOnItemClickListener is not workingGridView.setOnItemClickListener 不工作
【发布时间】:2012-08-09 11:56:51
【问题描述】:

自 2 天以来,我一直遇到一个问题。我有一个网格视图,我需要显示图像。当我单击网格项目时,它必须转到下一个活动。我可以在 gridview 中显示图像,但是问题是当我单击该项目时它没有响应..(OnItemClickListener 不起作用)。我无法追踪我做错的问题。

         package com.logictreeit.mobilezop.fragments;

     import android.app.Activity;
     import android.content.Context;
     import android.os.Bundle;
     import android.support.v4.app.Fragment;
     import android.util.Log;
     import android.view.LayoutInflater;
     import android.view.View;
     import android.view.ViewGroup;
     import android.widget.AdapterView;
     import android.widget.AdapterView.OnItemClickListener;
     import android.widget.GridView;

     import com.logictreeit.mobilezop.adapters.PhotoAdapter;
     import com.logictreeit.mobilezop.custom.Utils;

      public class Dup_AlbumPhotosFragment extends Fragment implements
                OnItemClickListener {

private static final String TAG = "AlbumPhotos Fragment";
private GridView gridView;
private Context mContext;
private PhotoAdapter photoAdapter;

public void onActivityCreated(Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);
    Log.v(TAG, "on Activity Created ");

}

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
}

public void onAttach(Activity activity) {
    super.onAttach(activity);
    this.mContext = activity;
}

public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
    Log.v(TAG, "OnCreateView");
    gridView = new GridView(mContext);
    gridView.setNumColumns(GridView.AUTO_FIT);
    gridView.setClickable(true);
    gridView.setOnItemClickListener(this);
    photoAdapter = new PhotoAdapter(mContext,                   -1,Utils.getALbumList().get(0).getPhotosList());
    gridView.setAdapter(photoAdapter);
    return gridView;
}

@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
    Log.v(TAG, "on ItemClikced");

}

       }

这是我的片段..

         package com.logictreeit.mobilezop.adapters;

        import java.util.List;

         import android.content.Context;
         import android.view.LayoutInflater;
         import android.view.View;
         import android.view.ViewGroup;
         import android.widget.ArrayAdapter;
         import android.widget.CheckBox;
         import android.widget.CompoundButton;
         import android.widget.CompoundButton.OnCheckedChangeListener;
         import android.widget.ImageView;

        import com.logictreeit.mobilezop.R;
        import com.logictreeit.mobilezop.models.Photo;

            public class DupPhotoAdapter extends ArrayAdapter<Photo> {
            private static final String TAG = "PhotoAdapter";
            private Context context;
private List<Photo> photoList;

public DupPhotoAdapter(Context context, int textViewResourceId,
        List<Photo> objects) {
    super(context, textViewResourceId, objects);
    this.context = context;
    this.photoList = objects;
}

public int getCount() {
    return photoList.size();
}

public View getView(int position, View convertView, ViewGroup parent) {
    convertView = LayoutInflater.from(context).inflate(
            R.layout.grid_item_image_layout, null);

    ImageView imageView = (ImageView) convertView
            .findViewById(R.id.grid_item_imageview);
    final CheckBox checkBox = (CheckBox) convertView
            .findViewById(R.id.grid_item_checkbox);
    final Photo photo = photoList.get(position);

    if (photo.isSelected()) {
        checkBox.setChecked(true);
    } else {
        checkBox.setChecked(false);
    }
    imageView.setImageResource(Integer.parseInt(photo.getFileUrl()));
    checkBox.setOnCheckedChangeListener(new OnCheckedChangeListener() {
        public void onCheckedChanged(CompoundButton buttonView,
                boolean isChecked) {
            if (isChecked) {
                photo.setSelected(true);
            } else {
                photo.setSelected(false);
            }

        }
    });
    return convertView;

}

     } 

这是我的适配器。

如果你们知道。你能告诉我...

谢谢, 柴坦尼亚

【问题讨论】:

    标签: android gridview android-adapterview


    【解决方案1】:

    我认为您的 ImageViews 窃取焦点是因为它们是可检查的。所以项目点击不会发生,因为你的 ImageViews 拦截它。

    将这些属性添加到您的图像视图可能会有所帮助,但可能会给您的检查带来麻烦。

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

    在列表视图中有可检查的项目有点痛苦。但我认为你会找到相关的主题如何做到这一点。

    这里有 1 个看似合适的教程,我承认我没有仔细研究它,但你可能想要:

    http://windrealm.org/tutorials/android/listview-with-checkboxes-without-listactivity.php

    【讨论】:

    • 谢谢康斯坦丁..非常感谢..它对我有用..为图像视图和复选框添加了这些道具,然后只有它起作用了。
    • 我以编程方式在线性布局中添加了图像视图和复选框。所以我通过java代码做上面的两行。但是,我仍然无法收到任何点击项。
    • 我有一个网格视图,每个项目都是线性布局,在这种情况下没有收到点击事件,但如果项目是图像,那么收到点击事件知道如何解决这个问题?我试过这样做,但它不起作用: imageView.setClickable(false); imageView.setFocusable(false); imageView.setFocusableInTouchMode(false);线性布局.setClickable(true);线性布局.setFocusable(true); linearLayout.setFocusableInTouchMode(true);
    • 在我的例子中,我的 gridview 项目的根视图也应该有android:focusable="false"android:focusableInTouchMode="false"。非常感谢!
    【解决方案2】:

    希望这可以帮助某人, 在gridview中,如果你在其中的元素中添加按钮或设置“android:clickable=true”,gridview的OnItemClickListener将不会被监听,相反你可以创建一个Image或TextView,并查看你没有设置clickable= “真的”。现在,OnItemClickListener 将监听 TextView,这对我有用。

    【讨论】:

      【解决方案3】:

      还要确保您的适配器为 isEnabled 返回 true

      @Override
           public boolean isEnabled(int i) {
           return true;
      }
      

      http://developer.android.com/reference/android/widget/BaseAdapter.html#isEnabled(int)

      isEnabled(int position) 如果项目在指定位置,则返回 true 位置不是分隔符。

      否则点击事件不会为你的物品抛出

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-01-10
        • 1970-01-01
        • 2019-01-19
        • 1970-01-01
        • 2018-12-22
        • 2016-04-19
        相关资源
        最近更新 更多