2012-11-11 84 views
0

我需要顯示爲ListView項目的AlertDialogListView和上下文菜單。我更喜歡使用AlertDialog.Builder,並呼籲setItems(),所以Builder程式化的佈局,我創建了一個ListViewAlertDialog內。對於使用內部Android資源的風格化,所以我不能在我的代碼中重新實現它。如何擴展AlertDialog.Builder結果?

的問題是,我不能趕上,因爲默認AlertDialog.onMenuItemSelected()執行,不這樣的事件轉發到父上下文菜單項單擊事件:

public boolean onMenuItemSelected(int featureId, MenuItem item) { 
    return false; 
} 

我不能擴展AlertDialog.Builder類,並迫使它來創建我自己的一個實例AlertDialogonMenuItemSelected()覆蓋,因爲我需要重寫AlertDialog.Builder.create()。但它採用的是私有P變量,這是不是從派生類訪問:

public AlertDialog create() { 
     final AlertDialog dialog = new AlertDialog(P.mContext, mTheme, false); 
     P.apply(dialog.mAlert); 
     dialog.setCancelable(P.mCancelable); 
     if (P.mCancelable) { 
      dialog.setCanceledOnTouchOutside(true); 
     } 
     dialog.setOnCancelListener(P.mOnCancelListener); 
     if (P.mOnKeyListener != null) { 
      dialog.setOnKeyListener(P.mOnKeyListener); 
     } 
     return dialog; 
    } 

有沒有辦法迫使AlertDialog.Builder構建自定義AlertDialog(與onMenuItemSelected方法重寫)?

+0

你的問題有點含糊。你講的是實現'ContextMenu',但是你指的是'onMenuItemSelected'回調。另外,我希望我明白,您正在嘗試爲'AlertDialog'列表中的元素顯示'ContextMenu'?如果是的話,我會建議不要這樣做,因爲它會讓用戶覺得很尷尬。另外'AlertDialog'類只是一個簡單的對話框,表明它不是爲擴展而設計的(因爲父類更適合這個)。 – Luksprog

+0

對不起,我英文很差。我指的是'onMenuItemSelected',因爲它是你需要用來處理對話框中上下文菜單點擊的方法(而不是'onContextItemSelected')。我的應用程序中有一組過濾器。我讓用戶用AlertDialog選擇一個過濾器。我需要讓用戶從列表中刪除一個過濾器。至於我最好的方法是使用'刪除'上下文菜單項。你知道在哪裏可以找到上下文菜單事件調度的實際代碼? 「ContextMenu」接口的實際實現在哪裏?謝謝。 – Kallisto

+0

我強烈建議您創建自己的'Dialog',其中包含一個'ListView'和過濾條目。我還會在每一行上放一個小的「Button」按鈕,這將觸發刪除該過濾器。 'ContextMenu'由系統處理。 – Luksprog

回答

0

我仍然發現的問題沒有解決,但我發現了一些問題,這使得該解決方案毫無用處。爲Android 2.1,內置ListView項目(android.R.layout.select_dialog_item)被顯示爲在暗灰色背景黑色文本,ListView項目不從對話消息(setMessage())等

我最後切換分離返回我自己的AlertDialog,並自定義佈局ListView及其項目(AlertDialog.Builer未使用)。上下文菜單事件可以很容易地通過這種方式獲得。

Luksprog,非常感謝您的意見。但主要想法是儘可能多地使用程式化佈局。 AFAIK,沒有標準佈局(android.R.layout.*)提供您提到的按鈕。此外,可以使用按鈕偶爾刪除一個項目。使用上下文菜單,至少需要兩次點擊才能刪除項目。

+0

ListView的深灰色文本上的黑色是setTheme(android.R.style.Theme_Light)for _another_(?!)活動(不是調用對話框的主要活動)的副作用。無論如何,我會很樂意接受任何解決原始問題的答案。 – Kallisto