Android:Customcan GridView在设置setOnItemClickListener()和setOnItemLongClickListener()方法时效果不佳

时间:2014-07-04 03:13:57

标签: 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) {
        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);

    }
}

然后在setOnItemClickListener() setOnItemLongClickListener()中为此gridView设置onItemLongClick()true方法,然后返回setOnItemLongClickListener()。 befor调用setOnItemClickListener()方法setOnItemLongClickListener()非常有效,但在调用setOnItemClickListener()方法一次后,setOnItemLongClickListener()和{{1}}都无效。无论什么操作都没有回应

任何人都可以帮助我吗?非常感谢!

2 个答案:

答案 0 :(得分:0)

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

如果这不能解决问题,那么我建议您使用适配器代码发布Fragment / Activity代码,也可能使用您用于Fragment / Activity布局的XML,这样我们就可以看到问题可能出在哪里了

我用我的一个网格视图测试了下面的代码,它运行得很好。

@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;
        }           
    });

答案 1 :(得分:0)

检查

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 true;
    }           
});