ソース掲示板




すべてから検索

キーワード   条件 表示 現行ログ 過去ログ トピックス 名前 本文

  メンテナンス 前画面に戻る

対象スレッド 件名: Android Studio : カスタムダイアログ
名前: lightbox
処理選択
パスワード

件名 Android Studio : カスタムダイアログ
名前 lightbox
コメント
@HTML
<img src="https://lh3.googleusercontent.com/-HRh8UFpUIQw/Vg-UHBX-WOI/AAAAAAAAb40/HQh5sSiEvQM/s400-Ic42/_img.png" style="border: solid 1px #000000">
@HEND

@SHOW
カスタムダイアログで View をセットする場合は、View が含まれたダイアログのインスタンスを使って再度表示します。

[[1回目]]
ad = adb.create();
ad.show();

[[2回目]]
ad.show();

[[この場合、次の表示では、内部の状態は保持されています。ここでは EditText を使用しており、内容を取得した後はクリアしています。]]

adb 側で show するには、毎回新しい View を作成して setView する必要があります。
※ View の内容は毎回初期化されます
@END

@DIV
package sample.lightbox.dialogproject;

import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.EditText;

public class MainActivity extends Activity {

	// ダイアログ作成用
	private AlertDialog.Builder adb = null;
	// ダイアログのインスタンス
	private AlertDialog ad = null;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);

		// ダイアログ作成用のインスタンス
		adb = new AlertDialog.Builder(MainActivity.this	);
		// final で view をメモリに固定する
		final View view = MainActivity.this.getLayoutInflater().inflate(R.layout.content_main, null);

		// ダイアログのオプション
		adb
			.setTitle("カスタム ダイアログ")
			.setView(view)
			.setPositiveButton("YES", new DialogInterface.OnClickListener() {
				@Override
				public void onClick(DialogInterface dialog, int which) {
					// 登録された画面より取得する
					EditText et = (EditText) view.findViewById(R.id.textInDialog);
					// 入力値の処理
					Log.i("lightbox", "PositiveButton");
					Log.i("lightbox", et.getText().toString());

					// 処理が終了したので、テキストエリアをクリアする
					// ※ クリアしなければ、次に表示した時に残っています
					et.setText("");
				}
			});
		// ダイアログそのものの インスタンス 生成
		ad = adb.create();

		// ボタンのイベント
		MainActivity.this.findViewById(R.id.button).setOnClickListener(new View.OnClickListener() {
			@Override
			public void onClick(View v) {
				// ダイアログを表示
				ad.show();
			}
		});
	}

}
@END