2

hereのように、その onCreateDialog メソッドでDialogFragmentを返す拡張クラスを作成しました。 問題は、標準(正)ボタンの高さを上げたいのですが、高さを変更するためにそれを手に入れることができないということです。 の onCreateDialog メソッドで次のことを行うと、AlertDialog

DialogFragment

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);

「...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 が発生します。AlertDialogを使用しているときに のボタンをカスタマイズする簡単な方法はありますDialogFragmentか?

4

2 に答える 2

4

Ok-フラグメントのonActivityCreatedメソッド内のボタンを取得してみてください。これはリストフラグメントに対して行いましたが、同じように実行する必要があります。正しい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();
            }
    });
于 2012-05-15T14:58:22.350 に答える
2

別の方法は、を使用しonShowListenerてボタンを変更することです。同じ問題があり、ダイアログが表示されるまでボタンを手に入れることができませんでした.show()。AlertDialog の UI 要素はインスタンス化された後ではなく、後にbuilder.createのみインスタンス化されると思います.show()

mAlertDialog.setOnShowListener(new OnShowListener() {
        @Override
        public void onShow(DialogInterface dialog) {
            ((AlertDialog)dialog).getButton(AlertDialog.BUTTON_POSITIVE).setHeight(60);
        }
    });
于 2013-08-21T13:43:31.827 に答える