2

我創建了一個擴展DialogFragment的類,它在onCreateDialog方法中返回一個AlertDialog,如here
問題是,我想增加標準(正)按鈕的高度,但我無法控制它來改變它的高度。
當我做在的DialogFragmentAndroid 3.2 - 在DialogFragment中自定義AlertDialog按鈕

mAlertDialog = new AlertDialog.Builder(getActivity()) 
      .setView(messageView) 
      .setCustomTitle(titleView) 
      .setPositiveButton(R.string.dialog_button, 
       new DialogInterface.OnClickListener() { 
        public void onClick(DialogInterface dialog, int whichButton) { 
         ((ContextSwapUserInterface) getActivity()).instructionsAccepted(); 
        } 
       } 
      ) 
      .create(); 

mAlertDialog.getButton(AlertDialog.BUTTON_POSITIVE).setHeight(60); 

我得到一個例外,它說的onCreateDialog方法如下「......無法實例ComponentInfo ......」
我猜這是因爲按鈕在這個時間點沒有正確實例化。
於是,我讓我的主要活動按鈕,我創建了DialogFragment並把它稱爲是.show方法之後:

// Create and show a new InstructionsDialogFragment 
DialogFragment instructionsDialogFragment = InstructionsDialogFragment.newInstance(mInstructions); 
instructionsDialogFragment.show(getFragmentManager(), "Instructions Dialog"); 
((Button) instructionsDialogFragment.getDialog().findViewById(android.R.id.button1)).setHeight(60); 

我也試過以下,而不是最後一行上面:

((AlertDialog) instructionsDialogFragment.getDialog()).getButton(AlertDialog.BUTTON_POSITIVE).setHeight(60); 

這兩個版本都會導致NullPointerException。在使用DialogFragment時,有沒有簡單的方法可以自定義AlertDialog的按鈕?

回答

4

好的 - 嘗試在片段的onActivityCreated方法內開始按鈕。我這樣做了listfragment,但它應該做同樣的 - 檢查你有正確的ID等

@Override 
    public void onActivityCreated(Bundle savedInstanceState) { 
     super.onActivityCreated(savedInstanceState); 

     Button b = (Button)this.getView().findViewById(R.id.buttonID); 

     b.setOnClickListener(new View.OnClickListener() { 
      public void onClick(View v) { 
       Toast.makeText(getActivity(), "Button Clicked", Toast.LENGTH_SHORT).show(); 
      } 
    }); 
+0

我在onResume()方法中試過它,它工作,雖然你的建議可能也適用。不幸的是,我沒有時間去測試它。坦克反正 – Schnodahipfe

2

另一種方法是使用一個onShowListener修改按鈕 我有同樣的問題,我counldn」 t把我的手放在按鈕上,直到對話框顯示爲.show()。我認爲AlertDialog的UI元素在builder.create之後沒有實例化,但是僅在.show()之後。

mAlertDialog.setOnShowListener(new OnShowListener() { 
     @Override 
     public void onShow(DialogInterface dialog) { 
      ((AlertDialog)dialog).getButton(AlertDialog.BUTTON_POSITIVE).setHeight(60); 
     } 
    });