有一个自定义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}}都无效。无论什么操作都没有回应
任何人都可以帮助我吗?非常感谢!
答案 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;
}
});