|
日時: 2016/06/25 22:02
名前: lightbox
|
MainActivity.java
拡張子:
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;
}
}
}
|