Android:CustomCanGridView在同时设置setOnItemClickListener()和setOnItemLongClickListener()方法时无法正常工作

Android:CustomCanGridView在同时设置setOnItemClickListener()和setOnItemLongClickListener()方法时无法正常工作,android,gridview,Android,Gridview,有一个自定义的gridView: public class MyGridView extends GridView { public MyGridView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); } public MyGridView(Context context, AttributeSet attrs) {

有一个自定义的gridView:

public class MyGridView extends GridView {

    public MyGridView(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);

    }
    public MyGridView(Context context, AttributeSet attrs) {
        super(context, attrs);

    }
    public MyGridView(Context context) {
        super(context);

    }
    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {

        int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2, MeasureSpec.AT_MOST);
        super.onMeasure(widthMeasureSpec, expandSpec);

    }
}
然后为此gridView设置setOnItemClickListener和setOnItemLongClickListener方法,在onItemLongClick中返回true。在调用setOnItemLongClickListener方法之前,setOnItemClickListener工作得很好,但在调用setOnItemLongClickListener方法一次之后,setOnItemClickListener和setOnItemLongClickListener都无法工作。无论做什么手术都没有反应


有人能帮我吗?非常感谢

如果在实例化gridview后在片段或活动中设置了以下侦听器,则在gridview中单击或长时间单击某个项时,应该能够在LogCat中看到日志语句。如果您已经这样做了,我将首先使用通用的gridview而不是自定义的gridview来尝试代码,并确保它能够正常工作。这也意味着需要正确设置适配器,以便在gridview中填充项。如果gridview中没有项目,这些侦听器将不会执行任何操作

如果这不能解决问题,那么我建议将片段/活动代码与适配器代码一起发布,还可能发布用于片段/活动布局的XML,这样我们就可以看到问题可能出在哪里

我已经用我的一个GridView测试了下面的代码,效果很好

@Override
public void onResume() {
    super.onResume();

    MyGridView gridView = (MyGridView) getView().findViewById(R.id.gridview);

    ...

    gridView.setOnItemClickListener(new OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view,
                int position, long id) {
            Log.v(TAG,"CLICK: ItemClick");              
        }           
    });

    gridView.setOnItemLongClickListener(new OnItemLongClickListener() {
        @Override
        public boolean onItemLongClick(AdapterView<?> parent, View view,
                int position, long id) {
            Log.v(TAG,"CLICK: LongClick");
            return false;
        }           
    });
检查这个

MyGridView gridView=MyGridView getView.findViewByIdR.id.gridView

gridView.setOnItemClickListener(new OnItemClickListener() {
    @Override
    public void onItemClick(AdapterView<?> parent, View view,
            int position, long id) {
        Log.v(TAG,"CLICK: ItemClick");              
    }           
});

gridView.setOnItemLongClickListener(new OnItemLongClickListener() {
    @Override
    public boolean onItemLongClick(AdapterView<?> parent, View view,
            int position, long id) {
        Log.v(TAG,"CLICK: LongClick");
        return true;
    }           
});

它不起作用!一切都是标准的,只是gridview是定制的。您是否使用通用的gridview测试了您的代码,并验证了所有功能是否正常?关于您的定制gridview,您想实现什么?通常,传入“makeMeasureSpec”的大小应该与您正在布局的内容相关。例如,要填充的显示区域的高度。将其设置为Integer.MAX_值可能不会有多大效果,因为无论如何,没有屏幕是如此大小。自定义网格视图通常是不需要的,而且在需要自定义它们的奇怪情况下,要正确使用它们是相当困难的。也许还有另一种方法可以实现你的目标。