SQLの窓

2016年06月26日


AlertDialog.Builder の setItems(int itemsId, DialogInterface .OnClickListener listener) を使用した、ListView ダイアログ : ノーマルと DialogFragment の共存サンプル




ListView ダイアログの中の ListView を ArrayAdapter でカスタマイズする前のテンプレートとして作成しました。一般的には、setItems で、文字列の配列をセットするのが通常だと思われるので、どうせなら、と思ってリソースにデータを定義して使用しています。

カスタム・リストビュー・ダイアログ : ダイアログ内の ListView を ArrayAdapter でカスタムする

カスタム・リストビュー・ダイアログ : DialogFragment 内の ListView を ArrayAdapter でカスタムする

1) MainActivity 内でのリソースの参照
MainActivity.this.getResources()
2) public static class MyDialogFragment 内でのリソースの参照
MyDialogFragment.this.getActivity()

MainActivity 内のソースコード
// *********************************
// ノーマルでは ダイアログフラグメントは
// 使用していません
// *********************************
private AlertDialog.Builder ad_builder;

// *********************************
// Android 初期設定
// *********************************
@Override
protected void onCreate(Bundle savedInstanceState) {
	super.onCreate(savedInstanceState);
	// 画面の表示
	setContentView(R.layout.activity_main);

	// *********************************
	// ノーマルダイアログ作成用インスタンス
	// *********************************
	ad_builder = new AlertDialog.Builder(MainActivity.this);
	// タイトル設定
	ad_builder.setTitle("地域一覧");
	ad_builder.setNegativeButton("キャンセル", new DialogInterface.OnClickListener() {
		@Override
		public void onClick(DialogInterface dialog, int which) {
			// キャンセル
		}
	});
	// *********************************
	// ノーマル用データのセットと、行を選択時の処理
	// *********************************
	ad_builder.setItems(R.array.ken, new DialogInterface.OnClickListener() {
		@Override
		public void onClick(DialogInterface dialog, int which) {

			String[] ken = MainActivity.this.getResources().getStringArray(R.array.ken);
			int[] ken_value = MainActivity.this.getResources().getIntArray(R.array.ken_value);

			// メッセージの作成
			String message = String.format("%s : %d", ken[which], ken_value[which]);

			// logcat に表示
			Log.i("lightbox", message );

			// Toast で表示
			Toast.makeText(MainActivity.this,message,Toast.LENGTH_SHORT).show();

			// TextView に表示
			TextView tv;
			tv = (TextView) MainActivity.this.findViewById(R.id.textView);
			tv.setText(message);

		}
	});

	// *********************************
	// ボタンをクリック
	// ( ノーマル表示 )
	// *********************************
	MainActivity.this.findViewById(R.id.button).setOnClickListener(new View.OnClickListener() {
		@Override
		public void onClick(View v) {

			// ダイアログの表示
			ad_builder.show();

		}
	});
	

	// *********************************
	// ボタンをクリック
	// ( ダイアログフラグメント で表示 )
	// *********************************
	MainActivity.this.findViewById(R.id.button2).setOnClickListener(new View.OnClickListener() {
		@Override
		public void onClick(View v) {

			// インスタンス作成
			MyDialogFragment my_dialog_fragment = new MyDialogFragment();
			// システムに引数を保存
			Bundle args = new Bundle();
			args.putString("title", "地域一覧");
			my_dialog_fragment.setArguments(args);

			// 定義しておいた newInstance メソッドを使う場合
			// MyDialogFragment my_dialog_fragment = MyDialogFragment.newInstance("地域一覧");

			// ダイアログの表示
			// ※ この環境では、getSupportFragmentManager が必要です 
			my_dialog_fragment.show(getSupportFragmentManager(),"dialog");

		}
	});

}

// *********************************
// ここから、ダイアログフラグメントを使用して
// 表示する処理用のクラス定義です
// ダイアログフラグメント( static )
// *********************************
public static class MyDialogFragment extends DialogFragment {

	// ユーザが呼び出す為のもの( 外側で処理しても良い )
	public static MyDialogFragment newInstance(String title) {
		// インスタンス作成
		MyDialogFragment my_dialog_fragment = new MyDialogFragment();
		// システムに引数を保存
		Bundle args = new Bundle();
		args.putString("title", title);
		my_dialog_fragment.setArguments(args);
		return my_dialog_fragment;
	}

	// *********************************
	// ここが、ダイアログの作成時に呼ばれます
	// 初回はユーザがダイアログを作成
	// デバイスを横にした時はシステムが
	// ダイアログを作成します
	// *********************************
	@Override
	public Dialog onCreateDialog(Bundle savedInstanceState) {

		// この中で使用するダイアログ作成用
		AlertDialog.Builder ad_builder_in_fragment;

		// この DialogFragment に保存されているデータを取得
		// ( システムが再作成した場合でも Bundle よりデータを取得できます )
		String title = MyDialogFragment.this.getArguments().getString("title");

		// DialogFragment から Activity を取得して使う
		// ( ダイアログが使われる Activity を MyDialogFragment 内で取得しています )
		ad_builder_in_fragment = new AlertDialog.Builder(MyDialogFragment.this.getActivity());
		// タイトル設定
		ad_builder_in_fragment.setTitle(title);
		ad_builder_in_fragment.setNegativeButton("キャンセル", new DialogInterface.OnClickListener() {
			@Override
			public void onClick(DialogInterface dialog, int which) {
				// キャンセル
			}
		});
		// データのセットと、行を選択時の処理
		ad_builder_in_fragment.setItems(R.array.ken, new DialogInterface.OnClickListener() {
			@Override
			public void onClick(DialogInterface dialog, int which) {

				// 現在の Activity
				// ( ダイアログが使われる Activity を MyDialogFragment 内で取得しています )
				FragmentActivity this_activity = MyDialogFragment.this.getActivity();

				// リソースより表示データと対応する内部コードを取得しています
				String[] ken = this_activity.getResources().getStringArray(R.array.ken);
				int[] ken_value = this_activity.getResources().getIntArray(R.array.ken_value);

				// メッセージの作成
				String message = String.format("%s : %d", ken[which], ken_value[which]);

				// logcat に表示
				Log.i("lightbox", message );

				// Toast で表示
				Toast.makeText(this_activity,message,Toast.LENGTH_SHORT).show();

				// TextView に表示
				TextView tv;
				tv = (TextView) this_activity.findViewById(R.id.textView);
				tv.setText(message);

			}
		});


		// ダイアログを作成してシステムに返す
		return ad_builder_in_fragment.create();
	}
}


※ 全てのソースコードはこちらにあります




【Android Studio 2の最新記事】
posted by lightbox at 2016-06-26 00:49 | Android Studio 2 | このブログの読者になる | 更新情報をチェックする
container 終わり



フリーフォントで簡単ロゴ作成
フリーフォントでボタン素材作成
フリーフォントで吹き出し画像作成
フリーフォントではんこ画像作成
ほぼ自由に利用できるフリーフォント
フリーフォントの書体見本とサンプル
画像を大きく見る為のウインドウを開くボタンの作成

CSS ドロップシャドウの参考デモ
イラストAC
ぱくたそ
写真素材 足成
フリーフォント一覧
utf8 文字ツール
右サイド 終わり
base 終わり