1. ueno-yuhei

    Posted

    ueno-yuhei
Changes in title
+ダイアログにListView表示
Changes in tags
Changes in body
Source | HTML | Preview
@@ -0,0 +1,123 @@
+# AlertDialog内にListviewを表示してみる
+
+AlertDialogには、setView(View view)メソッドがあります。
+これを使用して、Dialog内にListViewを表示してみます。
+もちろん自作で作成したListViewをsetView(View view)に渡す事も可能です。
+
+```java
+public class MainActivity2 extends Activity{
+ @Override
+ protected void onCreate(Bundle savedInstanceState){
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_main2);
+
+ ArrayList<Item> itemList = new ArrayList<Item>();
+ for(int i=0;i<=1000;i++){
+ Item item = new Item();
+ item.setIntItem(i);
+ item.setStringItem(i+"");
+ itemList.add(item);
+ }
+
+ CustomAdapter adapter = new CustomAdapter(getApplicationContext(), 0, itemList);
+ ListView listView = new ListView(this);
+ listView.setAdapter(adapter);
+
+ AlertDialog dialog = new AlertDialog.Builder(this)
+ .setTitle("選択してくだい。")
+ .setView(listView).create();
+ dialog.show();
+ }
+
+ // ListViewで使用するItemClass
+ public class Item{
+ private int intItem;
+ private String stringItem;
+
+ public void setStringItem(String stringItem){
+ this.stringItem = stringItem;
+ }
+ public String getStringItem(){
+ return this.stringItem;
+ }
+ public void setIntItem(int intItem){
+ this.intItem = intItem;
+ }
+ public int getIntItem(){
+ return this.intItem;
+ }
+ }
+
+ // ListViewで使用するadapter
+ public class CustomAdapter extends ArrayAdapter<Item>{
+ private LayoutInflater inflater;
+
+ public CustomAdapter(Context context, int resource, List<Item> objects) {
+ super(context, resource, objects);
+ inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
+ }
+ @Override
+ public View getView(int position, View v, ViewGroup parent) {
+ Item item = (Item)getItem(position);
+ if (null == v) v = inflater.inflate(R.layout.custom_listview, null);
+
+ TextView intTextView = (TextView)v.findViewById(R.id.int_item);
+ intTextView.setText(item.getIntItem()+"");
+
+ TextView stringTextView = (TextView)v.findViewById(R.id.string_item);
+ stringTextView.setText(item.getStringItem());
+ return v;
+ }
+ }
+}
+```
+
+```xml:custom_listview
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:gravity="center"
+ android:orientation="horizontal" >
+
+ <TextView
+ android:id="@+id/int_item"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_gravity="center"
+ android:layout_margin="10dp" >
+ </TextView>
+
+ <TextView
+ android:id="@+id/string_item"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_gravity="center"
+ android:layout_margin="10dp" >
+ </TextView>
+
+</LinearLayout>
+```
+
+以上全文です。
+ポイントはここだけです。
+
+```java
+AlertDialog dialog = new AlertDialog.Builder(this)
+.setTitle("選択してくだい。")
+.setView(listView).create();
+dialog.show();
+```
+
+作成したListViewをsetViewで渡します。こうするとこのAlertDailog内にListViewが表示されます。
+
+```java
+listView.setOnClickListener(new OnClickListener() {
+ @Override
+ public void onClick(View v) {}
+});
+```
+でリスナーを登録するこもと可能です。
+スクリーンショットです。
+
+![Screenshot_2014-06-07-17-24-47.png](https://qiita-image-store.s3.amazonaws.com/0/30138/b215cfa2-5aba-d266-86c2-ffc3e2432975.png)