ソース掲示板




すべてから検索

キーワード   条件 表示 現行ログ 過去ログ トピックス 名前 本文
ListView ダイアログ : リソースに表示データを定義して利用
日時: 2016/06/25 15:31
名前: lightbox





package lightbox.june.listviewdialog;

import android.app.Dialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.support.v4.app.DialogFragment;
import android.support.v4.app.FragmentActivity;
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {

	// *********************************
	// ノーマルでは ダイアログフラグメントは
	// 使用していません
	// *********************************
	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();
		}
	}

}
メンテナンス

リソース定義 : strings.xml ( No.1 )
日時: 2016/06/25 15:17
名前: lightbox


日時: 2016/06/25 15:17
名前: lightbox
<resources>
    <string name="app_name">ListViewDialog</string>

    <string-array name="ken">
        <item>大阪</item>
        <item>東京</item>
        <item>岡山</item>
    </string-array>

    <integer-array name="ken_value">
        <item>27</item>
        <item>13</item>
        <item>33</item>
    </integer-array>

</resources>
このアーティクルの参照用URLをクリップボードにコピー メンテナンス
画面定義 : activity_main.xml ( No.2 )
日時: 2016/06/25 15:25
名前: lightbox
    
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="lightbox.june.listviewdialog.MainActivity">

    <LinearLayout
        android:orientation="horizontal"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/linearLayout">

        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="ノーマル"
            android:id="@+id/button"
            android:layout_weight="1"/>

        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="ダイアログフラグメント"
            android:id="@+id/button2"
            android:layout_weight="1"/>

    </LinearLayout>

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceLarge"
        android:text="地域名と内部コード"
        android:id="@+id/textView"
        android:layout_below="@+id/linearLayout"
        android:layout_alignParentStart="true"/>

</RelativeLayout>
このアーティクルの参照用URLをクリップボードにコピー メンテナンス