【发布时间】:2011-01-09 07:24:36
【问题描述】:
我的问题和这个类似:ListView: disabling clicking/focus
但是,我不想禁用默认的 onClick,只是长按。我已经为创建上下文菜单注册了我的 ListView,并且我想为标题元素禁用它(或者至少改变它的行为)。我该怎么办?
谢谢!
【问题讨论】:
标签: android listview onlongclicklistener
我的问题和这个类似:ListView: disabling clicking/focus
但是,我不想禁用默认的 onClick,只是长按。我已经为创建上下文菜单注册了我的 ListView,并且我想为标题元素禁用它(或者至少改变它的行为)。我该怎么办?
谢谢!
【问题讨论】:
标签: android listview onlongclicklistener
想通了! menuInfo 不一定是 AdapterContextMenuInfo(有位置)并不明显。
@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {
super.onCreateContextMenu(menu, v, menuInfo);
MenuInflater inflater = getMenuInflater();
if (((AdapterContextMenuInfo)menuInfo).position == 1) {
inflater.inflate(R.menu.foo1, menu);
return;
}
inflater.inflate(R.menu.foo2, menu);
}
【讨论】:
我还没有尝试过,但它可能会起作用。
ListView 扩展了 ViewGroup,因此当 ListView 被“长按”时,应该向侦听器传递长按下的子视图。
创建您自己的实现 onLongClickListener 的 ListView 类,然后检查 View 是您的 Header 还是 Footer,如果是,则返回“true”以显示长按已被“使用”并表明不再需要应该采取行动。
protected MyListView extends ListView
implements onLongClickListener {
public boolean onLongClick (View v) {
boolean longClickConsumed = false;
// Check if v is either your Header or Footer
// if so then set longClickConsumed to be true
return longClickConsumed;
}
}
【讨论】:
This 答案几乎是好的,问题是长按没有取消,它只是有替代行为。同样什么也不做也会让用户感到困惑,因为用户界面会表现得好像有一个长按但什么都不会发生。
解决方法很简单。
listView.addFooterView(footer, null, false); 禁用常规单击和长单击
【讨论】: