在實際工作過程中,單單使用AlertDialog的單選功能不一定能滿足我們的需求,需要綁定數據到 listview
1. 自定義Layout
LayoutInflater factory = LayoutInflater.from(DialogActivity.this);
final View view = factory.inflate(R.layout.linerlayout, null);
2,構造數據
List<Map<String, String>> nameList = new ArrayList<Map<String, String>>();//建立一個數組存儲listview上顯示的數據
for (int m = 0; m < 15; m++) {//initData為一個list類型的數據源
Map<String, String> nameMap = new HashMap<String, String>();
nameMap.put("name", "name"+m);
nameMap.put("id", m+"");
nameList.add(nameMap);
}
3ListView數據綁定
listView= (ListView) view.findViewById(R.id.lv_list);
listView.setChoiceMode(ListView.CHOICE_MODE_SINGLE);
SimpleAdapter adapter = new SimpleAdapter(DialogActivity.this,
nameList, R.layout.item,
new String[] { "name","id" },
new int[] { R.id.tv1 ,R.id.tv2});
listView.setAdapter(adapter);
4.AlertDialog 綁定
final AlertDialog dialog = new AlertDialog.Builder(this)
.setTitle("選擇姓名").setView(view)//在這里把寫好的這個listview的布局加載dialog中
.setNegativeButton("取消", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
dialog.cancel();
}
}).create();
dialog.setCanceledOnTouchOutside(false);//使除了dialog以外的地方不能被點擊
dialog.show();
5. LIstview 點擊事件
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {//響應listview中的item的點擊事件
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
long arg3) {
Log.d("TAG","ok");
// TODO Auto-generated method stub
TextView btn = (TextView) arg1 .findViewById(R.id.tv2);//取得每條item中的textview控件
// et_name.setText(tv.getText().toString());
Log.d("TAG",btn.getText().toString());
// dialog.cancel();
}
});