0

EditTextウィジェットを含むカスタムビューでAlertDialogを使用しています。AlertDialogが表示される前に、EditTextウィジェットの内容を変更したい。これは通常、onPrepareDialog()をオーバーライドし、そこにテキストを設定することによって行われることを私は知っています。ただし、Activity.showDialog()の代わりにAlertDialog.show()を使用しているため、私が見る限り、これは特定のケースでは機能しません。

では、AlertDialog.show()を使用して表示されるダイアログでこれをどのように行う必要がありますか?1つの解決策は、ダイアログが前面に表示された後にテキストを設定することです。

AlertDialog alertDialog = builder.create(); 
alertDialog.show();
EditText editText = (EditText) alertDialog.findViewById(R.id.text);
editText.setText("Foo bar");

ただし、ダイアログが最初に表示されてからテキストが設定されるため、これは良い解決策ではないと思います。ダイアログが実際に表示される前にテキストを設定したいと思います。

これを達成する方法はありますか?findViewById()がalertDialog.show()の前に呼び出されるとnullを返すため、alertDialog.show()の前にそれを行うことはできません。

助けてくれてありがとう!

4

1 に答える 1

0
AlertDialog alertDialog = builder.create(); 
alertDialog.show();

AlertDialog.Builderオブジェクトにアクセスできるので、を呼び出す前にレイアウトを変更するだけbuilder.create()です。


添加

XMLファイルにEditTextウィジェットがあり、builder.setView(inflater.inflate(R.layout.mydialog、null))を使用して膨らませています。findViewById()を呼び出さずにこのEditTextウィジェットのテキストを変更するにはどうすればよいですか?

その行を一連のコマンドに分割します。具体的には、XMLを膨らませ、レイアウトを変更して、に渡しますsetView()

View view = inflater.inflate(R.layout.mydialog, null);
EditText editText = (EditText) view.findViewById(R.id.text);
editText.setText("Foo bar");
builder.setView(view);
于 2013-01-19T22:30:51.820 に答える