gpt4 book ai didi

onCreateContextMenu 和 onContextItemSelected 中的 Android NULL menuInfo 仅在手动调用 onListItemClick 中的 openContextMenu 时。长按有效

转载 作者:太空狗 更新时间:2023-10-29 15:08:27 26 4
gpt4 key购买 nike

我已经分析了这里的很多帖子,但没有发现任何与我的问题非常相似的问题。

基本上,我试图在 onListItemClick 中调用 openContextMenu(l)。这样做会创建一个没有 menuInfo 的上下文菜单。执行长按将正常工作。执行长按后,我的代码将开始工作并实际得到一个不为 null 的 menuInfo

我有一个 ListActivity,其中填充了一个 SimpleCursorAdapter,它从 SQL 中获取数据。

在我的 onCreate 中,我 registerForContextMenu(getListView())。我还尝试在调用 openContextMenu(l) 之前使用 registerForContextMenu(l)

任何帮助将不胜感激!谢谢。

这是我的代码示例:

public class MY_Activity extends ListActivity {

...

@Override
public void onCreate(Bundle savedInstanceState) {

...

UpdateTable();
registerForContextMenu(getListView());
}

...

@Override
public void onListItemClick(ListView l, View view, int position, long id) {
super.onListItemClick(l, view, position, id);

//THIS DOESNT WORK UNLESS A LONG CLICK HAPPENS FIRST
//registerForContextMenu(l); //Tried doing it here too
openContextMenu(l);
//unregisterForContextMenu(l); //Then unregistering here...
}

@Override
public void onCreateContextMenu(ContextMenu menu, View v,ContextMenuInfo menuInfo) {
super.onCreateContextMenu(menu, v, menuInfo);

//menuInfo will be null here.

menu.setHeaderTitle("Context Menu");
menu.add(0, v.getId(), 0, "One");
menu.add(0, v.getId(), 0, "Two");
menu.add(0, v.getId(), 0, "Three");
}

@Override
public boolean onContextItemSelected(MenuItem item) {
AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo();
if(info == null) {
Log.e("","NULL context menu intem info...");
return false;
}
}

public void UpdateTable() {
cursor = DatabaseHelper_Main.GetCursor(my_id);
cursorAdapter = new SimpleCursorAdapter(this, R.layout.my_listview_entry,
cursor, fields, fieldResources, 0);
setListAdapter(cursorAdapter);
}

...

最佳答案

我今天遇到了一个非常相似的问题,修复出乎意料的简单,但我不明白为什么,但我还是会在这里发布。

@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
m_contextMenu = true;
registerForContextMenu(parent);
m_listView.showContextMenuForChild(view);
unregisterForContextMenu(parent);
m_contextMenu = false;
}

我使用 m_contextMenu bool 值来指示上下文菜单正在显示,我有一个 onItemLongClickListener,如果 m_contextMenu 为真则返回 false,以便上下文菜单显示(如果 onItemLongClick() 返回真,则不会显示上下文菜单)。

关于onCreateContextMenu 和 onContextItemSelected 中的 Android NULL menuInfo 仅在手动调用 onListItemClick 中的 openContextMenu 时。长按有效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19323756/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com