我正在嘗試使用ContextMenu。
我已經使用SimpleCursorAdapter成功完成了簡單的ListActivity。
移動上我想的CursorAdapter更換SimpleCursorAdapter但仍保留文本菜單的行爲,所以我已經添加了兩個強制覆蓋功能bindView和NewView的onCreateContextMenu被ContextMenuInfo的null值調用
public View newView(Context context, Cursor cursor, ViewGroup parent) {
View view = mLayoutInflater.inflate(R.layout.check_row, parent, false);
registerForContextMenu(view);
return view;
}
注意它取代了registerForContextMenu的registerForContextMenu(getListView())在ListActivity的onCreate方法中。我發現有必要打電話給onCreateContextMenu(...)
所有這些工作(用預期的小部件創建的行,他們回調工作等)等。除了提供給onCreateContextMenu(...)的ContextMenuInfo參數現在爲空 - 阻止我訪問rowId。
是否有另一個竅門 - 可能在CursorAdapter的bindView(...)方法中?
我想把registerForContextMenu()放在onCreate()中,但這樣做會導致列表條目不響應長按 - 所以沒有調用onCreateContextMenu(),因此沒有上下文菜單。 將寄存器newView()導致回調onCreateContextMenu() - 但現在ContextMenuInfo參數爲null。 但是 - 在newView()和onCreate()中使用寄存器的工作原理如同使用ContextMenuInfo中的有效條目調用onCreateContextMenu()。 我不認爲這是'正確的',必須有更好的方法? – 2009-11-12 12:37:37
「我想把registerForContextMenu()放在onCreate()中,但這樣做會導致列表條目不響應長按 - 所以沒有調用onCreateContextMenu(),因此沒有上下文菜單。」查看http://github.com/commonsguy/cw-android/tree/master/Database/Constants/獲取ListView和registerForContextMenu()的示例。 – CommonsWare 2009-11-12 16:18:51
謝謝。我拿了這個樣本,試圖在這裏重新創建我的問題,而不是在我自己的代碼中 - 並且! 修改row.xml以使CheckBox和ContextMenus不再可用。您不需要任何邏輯來處理CheckBox,只需在行末添加以下內容即可。XML <複選框 機器人:layout_below = 「@ ID /值」 機器人:layout_width = 「WRAP_CONTENT」 機器人:layout_height = 「WRAP_CONTENT」 機器人:ID = 「@ + ID /檢查」 機器人:layout_toLeftOf =」 @ + id/value「 /> – 2009-11-13 18:27:18