使用ListView填充Dialog對話方塊裡的item
阿新 • • 發佈:2019-01-22
一般彈出對話方塊的內容是個提醒資訊,或者是“確認”和“取消”的選擇資訊,如果要是item是從外部獲取或者很多個怎麼辦,下面就介紹使用ListView來填充Item,並有點選事件!
其實寫法非常的簡單,寫一個Adapter類,呼叫即可
然後要為ListView單獨寫一個佈局檔案<span style="font-family:Microsoft YaHei;font-size:14px;">package com.example.dialoaglistview; import java.util.List; import java.util.Map; import android.content.Context; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.TextView; public class DialogItemsAdapter extends BaseAdapter{ private Context context; private List<Map<String,Object>> listItems; private LayoutInflater listContainer; public DialogItemsAdapter(Context context,List<Map<String,Object>> listItems){ this.context = context; listContainer = LayoutInflater.from(context); this.listItems = listItems; } public final class ListItemView{ public TextView value; } @Override public int getCount() { return listItems.size(); } @Override public Object getItem(int position) { if(position < listItems.size()){ return listItems.get(position); } return null; } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { ListItemView listItemView = new ListItemView(); if (convertView == null) { convertView = listContainer.inflate(R.layout.listview_item, null); listItemView.value = (TextView) convertView .findViewById(R.id.text_item); convertView.setTag(listItemView); } else { listItemView = (ListItemView) convertView.getTag(); } listItemView.value.setText((String) listItems.get(position) .get("value")); return convertView; } } </span>
剩下的就是呼叫這個Adapter了,主要程式碼如下<span style="font-family:Microsoft YaHei;font-size:14px;"><?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_horizontal" android:orientation="vertical" > <TextView android:id="@+id/text_item" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="樣式自己調" android:textSize="20sp" /> </LinearLayout> </span>
上面的items可以從外部檔案獲取,也可以從網路上獲取,總之,獲取多個item都可以<span style="font-family:Microsoft YaHei;font-size:14px;">private void showMyDialog() { final String items[] = {"報告廳","多媒體教室","機房","美術系教室","普通教室","實訓基地","實驗室","體育","音樂系教室","語音室"}; List<Map<String, Object>> data = new ArrayList<Map<String,Object>>(); for(int i = 0;i<items.length;i++){ Map<String,Object> item = new HashMap<String,Object>(); item.put("value",items[i]); data.add(item); } ListView listView= new ListView(this); //構造listview物件。 DialogItemsAdapter adapter = new DialogItemsAdapter( this, data); listView.setAdapter(adapter); final AlertDialog alertDialog = new AlertDialog.Builder( this).create(); alertDialog.setCanceledOnTouchOutside(false);//使除了dialog以外的地方不能被點選 alertDialog.setTitle("選擇教室型別"); alertDialog.setView(listView); alertDialog.show(); listView.setOnItemClickListener(new OnItemClickListener() {//響應listview中的item的點選事件 @Override public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) { // TODO Auto-generated method stub TextView tv = (TextView) arg1 .findViewById(R.id.text_item);//取得每條item中的textview控制元件 textView.setText(tv.getText().toString()); alertDialog.cancel(); } }); }</span>