ソース掲示板




すべてから検索

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

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

対象スレッド 件名: カスタム・リストビュー・ダイアログ : ダイアログ内の ListView を ArrayAdapter でカスタムする
名前: lightbox
処理選択
パスワード

件名 カスタム・リストビュー・ダイアログ : ダイアログ内の ListView を ArrayAdapter でカスタムする
名前 lightbox
コメント
@SHOW
https://lh3.googleusercontent.com/-AM-WZQW9Pp8/V26AoSqT6KI/AAAAAAAAe58/KkcYtxmNnY8Aeh9DA2bEX4W9MCWKnwDrwCCo/s400/Screenshot_2016-06-25-22-00-38%255B1%255D.png
@END

[[MainActivity.java]]
@DIV
package lightbox.june.listviewdialogcustom;

import android.content.Context;
import android.content.DialogInterface;
import android.os.Bundle;
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;

import java.util.ArrayList;
import java.util.List;

public class MainActivity extends AppCompatActivity {

	private AlertDialog ad = null;
	private AlertDialog.Builder ad_builder;
	private MyData[] my_data;
	private ListView list_view;
	private MyAdapter adapter;

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

		// *********************************
		// ListView に表示するデータ
		// *********************************
		List<MyData> list = new ArrayList<MyData>();
		list.add(new MyData("大阪","27"));
		list.add(new MyData("東京","13"));
		list.add(new MyData("岡山","33"));
		list.add(new MyData("北海道","1"));
		list.add(new MyData("沖縄","47"));
		list.add(new MyData("京都","26"));
		list.add(new MyData("滋賀","25"));

		// *********************************
		// 新しく領域確保して配列データを作成する
		// *********************************
		my_data = list.toArray( new MyData[0] );

		// *********************************
		// ノーマルダイアログ作成用インスタンス作成
		// *********************************
		ad_builder = new AlertDialog.Builder(MainActivity.this);
		// *********************************
		// タイトル設定
		// *********************************
		ad_builder.setTitle("地域一覧");
		// *********************************
		// キャンセルイベント
		// *********************************
		ad_builder.setNegativeButton("キャンセル", new DialogInterface.OnClickListener() {
			@Override
			public void onClick(DialogInterface dialog, int which) {
				// キャンセル
			}
		});
		// *********************************
		// ダイアログのメインビューに
		// リストビューを設定
		// *********************************
		LayoutInflater inflater = (LayoutInflater) MainActivity.this.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
		list_view = (ListView) inflater.inflate(R.layout.listview, null);
		// *********************************
		// 行をクリックした時のイベント
		// *********************************
		list_view.setOnItemClickListener(new AdapterView.OnItemClickListener() {
			@Override
			public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

				// Adapter 内の行データを取得
				MyData my_data = (MyData) adapter.getItem(position);

				// メッセージの作成
				String message = String.format("%s : %s", my_data.toString(), my_data.getValue());
				// 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);

				// 非表示
				ad.hide();
			}
		});
		// *********************************
		// カスタム・アダプター
		// *********************************
		adapter = new MyAdapter(MainActivity.this,R.layout.listview_item);
		// *********************************
		// カスタム・アダプターにデータをセット
		// *********************************
		adapter.addAll(my_data);
		// *********************************
		// ListView にカスタム・アダプターをセット
		// *********************************
		list_view.setAdapter(adapter);

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

				// 初回はなにもしない
				if ( ad != null ) {
					// ダイアログ内の親 View から ListView を削除
					ViewGroup vg = (ViewGroup) list_view.getParent();
					vg.removeView(list_view);
				}
				// ダイアログに ListView をセット
				ad_builder.setView(list_view);
				// ダイアログの表示
				// ( AlertDialog は 非表示処理に使用 )
				ad = ad_builder.show();

			}
		});

	}

	// *********************************
	// MyData 専用アダブター
	// *********************************
	private class MyAdapter extends ArrayAdapter {

		public MyAdapter(Context context, int resource) {
			super(context, resource);
		}

		@Override
		public View getView(int position, View convertView, ViewGroup parent) {

			View rowView = convertView;
			if (rowView == null) {
				// 現在の View の取得
				LayoutInflater inflater = (LayoutInflater) MainActivity.this.getSystemService
					(Context.LAYOUT_INFLATER_SERVICE);
				rowView = inflater.inflate(R.layout.listview_item, null);
			}

			MyData my_data = (MyData)this.getItem(position);

			TextView tv;
			// listview_item 内の textPlace にデータをセット
			tv = (TextView) rowView.findViewById(R.id.textPlace);
			tv.setText(my_data.toString());
			// listview_item 内の textCode にデータをセット
			tv = (TextView) rowView.findViewById(R.id.textCode);
			tv.setText(my_data.getValue());

			return rowView;
		}
	}

	// *********************************
	// MyData
	// *********************************
	private class MyData {

		private String myString;
		private String myValue;

		public MyData(String myString,String myValue) {
			this.myString = myString;
			this.myValue = myValue;
		}

		// データ取得用
		String getValue() {
			return myValue;
		}

		@Override
		public String toString() {
			return myString;
		}
	}
}
@END