我有一個ListView,它允許用戶長按一個項目來獲取上下文菜單。我遇到的問題是確定他們長期按下哪個ListItem
。我試着這樣做:檢測哪個選定的項目(在ListView中)產生了ContextMenu(Android)
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;
}
});
但感覺majorly kludgey給我。有沒有人有更好的解決方案?
我也是這樣做的。關鍵是弄清楚ContextMenuInfo對象是AdapterContextMenuInfo的一個實例。花了我一段時間來弄清楚。 – 2010-02-23 20:46:26
只有當物品背後的實際數據與從適配器創建的視圖緊密相關時,這纔會起作用。我發現這通常不是我創建的更復雜的適配器的情況(例如,它會顯示圖像和名稱;點擊它可以打開有關該項目的更多詳細信息,這取決於存儲在適配器)。 – 2010-02-23 21:54:45
優秀的回覆。同上找出ContextMenuInfo對象是AdapterContextMenuInfo的一個實例。 – pilcrowpipe 2012-04-22 20:15:54