2009-07-20 28 views
2

這裏是場景:我有一個ListActivity,長按一個項目會彈出一個上下文菜單。上下文菜單中的一個項目是「刪除」,並顯示一個確認框(和AlertDialog)。當用戶在確認對話框中按OK時,我需要知道最初選擇的項目的ID,以便我實際上可以刪除它。如何將所選項目的ID從ListView傳遞到Android中的AlertDialog?

流程是這樣的:

 

     This event:    Causes Android to call: 
----------------------------------------------------- 
Long press an item  -> onCreateContextMenu() 
Select context menu item -> onContextItemSelected() 
call showDialog()   -> onPrepareDialog() 
user clicks OK   -> onClick() 

在onCreateContextMenu和onContextMenuSelected,我可以從ContextMenuInfo所選項目的id來獲取。但是,在onPrepareDialog中,我不再有權訪問該信息。問題是onPrepareDialog需要這些信息來在其POSITIVE按鈕上設置一個onClick監聽器。

我知道,在onContextMenuSelected過程中,我可以將選定項目的ID存儲到我的活動字段中。我已經做到了,而且很有效。但它也很難看。它引入的有狀態讓我感到不安。有沒有其他人看到更好的方式來傳遞這些信息,而不是在活動中使用字段?

回答

0

我看到的是,在的Android 2.2(API級別8),它們加入的過載到showDialog採用一個束。看起來您可以使用將所選項目的ID放入該捆綁包中,然後在onPrepareDialog中進行訪問。這正是我所期待的。不幸的是,我的設備卡住了1.6(API級別4)。

1

由於您只有一個用戶在應用程序中一次只能做一個長按鍵(如果我理解了文檔的權利),爲什麼要將id存儲在您自己的字段中是不好的?聽起來像是一個完全合理的方式來做到這一點。

+0

同意...這很醜,但它會工作。 – 2009-07-20 11:08:25

+0

它迫使我對Android將如何調用我的活動做出假設。我認爲我在我的問題中列出的順序是正確的,但我可能錯過了一些細微差別,並且未來谷歌可能會改變它。編寫無狀態代碼比編寫非常有狀態的代碼更可取。 – 2009-07-20 13:39:31

相關問題