[解決済み] カスタムレイアウトとEditTextを持つAlertDialog.Builderは、ビューにアクセスすることができません。
質問
アラートダイアログを作成しようとしています。
EditText
オブジェクトでアラートダイアログを作成しようとしています。の初期テキストを設定する必要があります。
EditText
の初期テキストをプログラム的に設定する必要があります。以下は、私が持っているものです。
AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(this);
// ...Irrelevant code for customizing the buttons and title
AlertDialog alertDialog = dialogBuilder.create();
LayoutInflater inflater = this.getLayoutInflater();
alertDialog.setContentView(inflater.inflate(R.layout.alert_label_editor, null));
EditText editText = (EditText) findViewById(R.id.label_field);
editText.setText("test label");
alertDialog.show();
を有効にするために、何を変更する必要がありますか?
EditText
オブジェクトを作成するために、何を変更する必要がありますか?
[編集]
で、user370305さんらから指摘されたのが、このように
alertDialog.findViewById(R.id.label_field);
残念ながらここにも問題があります。どうやら、コンテンツビューを
AlertDialog
にコンテンツビューを設定すると、実行時にプログラムがクラッシュするようです。ビルダーに設定する必要があります。
AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(this);
// ...Irrelevant code for customizing the buttons and title
dialogBuilder.setView(inflater.inflate(R.layout.alert_label_editor, null));
AlertDialog alertDialog = dialogBuilder.create();
LayoutInflater inflater = this.getLayoutInflater();
EditText editText = (EditText) alertDialog.findViewById(R.id.label_field);
editText.setText("test label");
alertDialog.show();
残念ながら、これをやると
alertDialog.findViewById(R.id.label_field);
が返されます。
null
.
[/edit]
どのように解決するのですか?
editText
は
alertDialog
レイアウトの一部なので
editText
を参照しながら
alertDialog
EditText editText = (EditText) alertDialog.findViewById(R.id.label_field);
更新しました。
なぜなら、コード行に
dialogBuilder.setView(inflater.inflate(R.layout.alert_label_editor, null));
inflater
は
Null
.
以下のようにコードを更新し、各コード行を理解するようにしてください。
AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(this);
// ...Irrelevant code for customizing the buttons and title
LayoutInflater inflater = this.getLayoutInflater();
View dialogView = inflater.inflate(R.layout.alert_label_editor, null);
dialogBuilder.setView(dialogView);
EditText editText = (EditText) dialogView.findViewById(R.id.label_field);
editText.setText("test label");
AlertDialog alertDialog = dialogBuilder.create();
alertDialog.show();
アップデート2です。
UIコンポーネントの更新にInflaterで生成されたViewオブジェクトを使用しているため、他の方法では、直接
setView(int layourResId)
のメソッドを使うこともできます。
AlertDialog.Builder
クラスのメソッドで、API 21 以降で利用可能です。
関連
-
[解決済み] AndroidのEditTextビューで複数行を許可しますか?
-
[解決済み] Androidでファイルをダウンロードし、ProgressDialogで進捗を表示する。
-
[解決済み] 既存のカスタムテーマでXMLのアクティビティのタイトルバーを非表示にする方法
-
[解決済み] JVMターゲット1.8でビルドされたバイトコードをJVMターゲット1.6でビルドされているバイトコードにインライン化することができない
-
[解決済み] 角を丸くしたレイアウトを作るには・・・?
-
[解決済み] onMeasure カスタムビューの説明
-
[解決済み] エラー Android Studioで名前'default'を持つ構成が見つかりません。
-
[解決済み] Android 6.0でBluetooth Low Energyスキャンを使用するには位置情報を有効にする必要があります。
-
[解決済み] AndroidでNode.Jsを動作させる
-
[解決済み] android:fontFamily="sans-serif-light "と同等の機能をJavaコードで実現するには?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] SDカードからファイルを削除する方法を教えてください。
-
[解決済み] CardView layout_width="match_parent "が親のRecyclerViewの幅と一致しない。
-
[解決済み] エラー Android Studioで名前'default'を持つ構成が見つかりません。
-
[解決済み] OnScreen KeyboardのDoneキー押下を検出するAndroid
-
[解決済み] Android Studio: キーの復元ができない
-
[解決済み] カスタムレイアウトとEditTextを持つAlertDialog.Builderは、ビューにアクセスすることができません。
-
[解決済み] Android Studioで複数のデバイスでアプリを自動実行する
-
[解決済み] Android Studioからプロジェクトを削除する
-
[解決済み] Android: 複数の選択オプションを持つポップアップを作成する
-
[解決済み] 警告 あなたのApkは、プライバシーポリシーが必要なパーミッションを使用しています。(android.permission.READ_PHONE_STATE)