Android:CustomCanGridView在同时设置setOnItemClickListener()和setOnItemLongClickListener()方法时无法正常工作
有一个自定义的gridView: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) {
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_值可能不会有多大效果,因为无论如何,没有屏幕是如此大小。自定义网格视图通常是不需要的,而且在需要自定义它们的奇怪情况下,要正确使用它们是相当困难的。也许还有另一种方法可以实现你的目标。