gpt4 book ai didi

android - 检测哪个选定项目(在 ListView 中)产生了 ContextMenu (Android)

转载 作者:IT老高 更新时间:2023-10-28 13:25:45 26 4
gpt4 key购买 nike

我有一个 ListView这将允许用户长按一个项目以获取上下文菜单。我遇到的问题是确定他们长按了哪个 ListItem 。我试过这样做:

myListView.setOnCreateContextMenuListener(new OnCreateContextMenuListener() {
@Override public void onCreateContextMenu(ContextMenu menu, final View v, ContextMenuInfo menuInfo) {
menu.add("Make Toast")
.setOnMenuItemClickListener(new OnMenuItemClickListener() {
@Override public boolean onMenuItemClick(MenuItem item) {
String toastText = "You clicked position " + ((ListView)v).getSelectedItemPosition();
Toast.makeText(DisplayScheduleActivity.this, toastText, Toast.LENGTH_SHORT).show();
return true;
}
});
}
});

但它会一直挂到 ANR弹出。我怀疑在创建菜单后 ListItem 不再被选中。

看起来您可以监控点击或长按,然后在那里记录点击的项目:

 mArrivalsList.setOnItemLongClickListener(new OnItemLongClickListener() {
@Override public boolean onItemLongClick(AdapterView<?> parent, View v, int position, long id) {
// record position/id/whatever here
return false;
}
});

但这对我来说感觉很笨拙。有没有人对此有更好的解决方案?

最佳答案

我正是这样做的。在我的 onCreateContextMenu(...) 方法中,我将 ContextMenu.ContextMenuInfo 转换为 AdapterView.AdapterContextMenuInfo。从那里,您可以获得 targetView,然后将其再次转换到小部件。完整代码可在 HomeActivity.java 中获得,寻找 onCreateContextMenu(...) 方法。

@Override
public void onCreateContextMenu(ContextMenu contextMenu,
View v,
ContextMenu.ContextMenuInfo menuInfo) {
AdapterView.AdapterContextMenuInfo info =
(AdapterView.AdapterContextMenuInfo) menuInfo;
selectedWord = ((TextView) info.targetView).getText().toString();
selectedWordId = info.id;

contextMenu.setHeaderTitle(selectedWord);
contextMenu.add(0, CONTEXT_MENU_EDIT_ITEM, 0, R.string.edit);
contextMenu.add(0, CONTEXT_MENU_DELETE_ITEM, 1, R.string.delete);
}

请注意,我将所选文本以及所选 ID 存储在私有(private)字段中。由于 UI 是线程受限的,我知道 selectedWord 和 selectedWordId 字段对于以后的操作将是正确的。

关于android - 检测哪个选定项目(在 ListView 中)产生了 ContextMenu (Android),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2321332/

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