2009-11-11 28 views
4

我正在嘗試使用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(...)方法中?

回答

2

我在回答這個問題 - 但我會指出'commonsware.com'提供了線索和方向,參見上文。
問題
- 在行佈局中使用CheckBox會影響上下文菜單的使用
- 我相信CheckedTextView是用於多選的,它不適用於檢查狀態的初始化。

我通過,並以下
1.使用CheckedTextView
2. CursorAdapter的擴展bindView(...)
注期間初始化選中狀態的解決方案:這必須管理太
顯示正確的圖標3.在onListItemClick(...)中管理CheckedTextView的狀態並將其記錄在dBase中,不要忘記更新光標。

1

這不是正確的做法。您註冊ListView的上下文菜單,而不是行。預先呼叫registerForContextMenu(),也許在onCreate()之後膨脹佈局。

+1

我想把registerForContextMenu()放在onCreate()中,但這樣做會導致列表條目不響應長按 - 所以沒有調用onCreateContextMenu(),因此沒有上下文菜單。 將寄存器newView()導致回調onCreateContextMenu() - 但現在ContextMenuInfo參數爲null。 但是 - 在newView()和onCreate()中使用寄存器的工作原理如同使用ContextMenuInfo中的有效條目調用onCreateContextMenu()。 我不認爲這是'正確的',必須有更好的方法? – 2009-11-12 12:37:37

+0

「我想把registerForContextMenu()放在onCreate()中,但這樣做會導致列表條目不響應長按 - 所以沒有調用onCreateContextMenu(),因此沒有上下文菜單。」查看http://github.com/commonsguy/cw-android/tree/master/Database/Constants/獲取ListView和registerForContextMenu()的示例。 – CommonsWare 2009-11-12 16:18:51

+0

謝謝。我拿了這個樣本,試圖在這裏重新創建我的問題,而不是在我自己的代碼中 - 並且! 修改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

相關問題