在上一篇 中,只是實現一個perference,但是點擊以后沒有響應事件,我們可以定義一個一個Dialog,Dialog選項里面需要有圖片,文字說明,后面還需要一個單選按鈕,所以自己寫了一個demo,效果圖如下:
??????? 功能的完成是使用Dialog的addView()方法,把一個ListView添加進去。ListView控件里面使用了ImageView和CheckedTextView控件,CheckedTextView是一個提供文字和選擇框的控件。如果對于CheckedTextView不熟悉,請自己查下文檔,在這里就不在多說。
主要功能代碼如下:
?
[java]?view plaincopy
public?class?ListViewActivityextends?Activity?{??????????????@Override????????public?void?onCreate(Bundle?savedInstanceState){????????????super.onCreate(savedInstanceState);????????????setContentView(R.layout.main);????????????Button?button=(Button)findViewById(R.id.button);?????????????????????final?LayoutInflater?factory?=?LayoutInflater.from(ListViewActivity.this);??????????????????????final?View?view?=?factory.inflate(??????????????????????????????R.layout.listview,null);????????????final?ListView?list?=?(ListView)?view.findViewById(R.id.ListView01);???????????????????????ArrayList<HashMap<String,Object>>?listItem?=newArrayList<HashMap<String,?Object>>();?????????????for(int?i=0;i<5;i++)?????????????{????????????if(i==0){?????????????????HashMap<String,Object>?map?=new?HashMap<String,Object>();?????????????????????map.put("ItemImage",?R.drawable.checked);????????????????????map.put("ItemTitle",?"1");???????????????????????listItem.add(map);????????????}else?if(i==1){?????????????????HashMap<String,Object>?map?=new?HashMap<String,Object>();?????????????????????map.put("ItemImage",?R.drawable.c);?????????????????????map.put("ItemTitle",?"2");?????????????????????listItem.add(map);????????????}else?if(i==2){?????????????????HashMap<String,Object>?map?=new?HashMap<String,Object>();?????????????????????map.put("ItemImage",?R.drawable.d);?????????????????????map.put("ItemTitle",?"3");??????????????????????listItem.add(map);????????????}else?if(i==3){?????????????????HashMap<String,Object>?map?=new?HashMap<String,Object>();?????????????????????map.put("ItemImage",?R.drawable.d);?????????????????????map.put("ItemTitle",?"4");???????????????????????listItem.add(map);????????????}else{?????????????????HashMap<String,Object>?map?=new?HashMap<String,Object>();?????????????????????map.put("ItemImage",?R.drawable.e);?????????????????????map.put("ItemTitle",?"5");??????????????????????listItem.add(map);????????????}????????????}?????????????????????SimpleAdapter?listItemAdapter?=new?SimpleAdapter(this,listItem,????????????????????R.layout.item,????????????????????????????new?String[]?{"ItemImage","ItemTitle"},??????????????????????new?int[]?{R.id.imageView,R.id.checkedTextView}????????????????);??????????????????????????????????list.setAdapter(listItemAdapter);????????????????list.setOnItemClickListener(new?OnItemClickListener(){??????????????????????????????public?void?onItemClick(AdapterView<?>arg0,?View?arg1,int?arg2,?????????????????????????????long?arg3)?{?????????????????????????????????????for(int?i=0;i<arg0.getCount();i++)?????????????????????{??????????????????????View?v?=?list.getChildAt(i);????????????????????????CheckedTextViewcheckText=(CheckedTextView)v.findViewById(R.id.checkedTextView);????????????????????????checkText.setChecked(false);?????????????????????}?????????????????????????????????CheckedTextViewcheck=(CheckedTextView)arg1.findViewById(R.id.checkedTextView);???????????????????????????????check.setChecked(true);?????????????????}??????????????});???????????????final?AlertDialog.Builder?builder=new?AlertDialog.Builder(ListViewActivity.this);?????????????button.setOnClickListener(new?View.OnClickListener()?{????????????????public?void?onClick(View?v)?{???????????????????????????????????builder.setTitle("Dialog");????????????????????builder.setView(list);?????????????????builder.setNegativeButton("cencel",null);?????????????????builder.create().show();?????????????????????????????????????}?????????????});??????}??}?? ?
?
其中item.xml代碼如下
?
[html]?view plaincopy
<?xml?version="1.0"encoding="utf-8"?>????<LinearLayout?xmlns:android="http://schemas.android.com/apk/res/android"????????android:orientation="horizontal"????????android:layout_width="fill_parent"????????android:layout_height="fill_parent"????????>????????<ImageView???????????android:id="@+id/imageView"?????????????android:layout_width="wrap_content"????????????android:layout_height="wrap_content"????????????/>????????<CheckedTextView?xmlns:android="http://schemas.android.com/apk/res/android"????????android:id="@+id/checkedTextView"????????android:layout_width="match_parent"????????????android:layout_height="?android:attr/listPreferredItemHeight"????????android:textAppearance="?android:attr/textAppearanceLarge"????????android:gravity="center_vertical"????????android:checkMark="?android:attr/listChoiceIndicatorSingle"????????android:paddingLeft="6dip"????????android:paddingRight="6dip"????/>????</LinearLayout>?? ?
?
Listview.xml文件如下
?
[html]?view plaincopy
<?xml?version="1.0"encoding="utf-8"?>???????<ListView?xmlns:android="http://schemas.android.com/apk/res/android"?????????????android:layout_width="wrap_content"????????????????android:layout_height="wrap_content"????????????????android:id="@+id/ListView01"???????????????/>??? ?
應該特別注意listview.xml不要把他寫在一個父控件下如:LinearLayout等,如果這樣會出現錯誤,。還有就是如果你listview添加過多選項,當單擊的時候會出現空指針異常。
?
另外,Demo源代碼可以在此下載。
http://download.csdn.net/source/3494251
?
2012年7月19號補充:
???????????當listView中含有超過一屏幕的時候,采用以上方法會有空指針異常,是因為未顯示的View為空,但是上面代碼中要遍歷所有代碼,所以為空。如何優化,可以參考
ListView Item 選擇問題解決之道
這篇文章。
?
???????
轉載于:https://www.cnblogs.com/kevincode/p/3838569.html
總結
以上是生活随笔為你收集整理的自定义Dialog(图片,文字说明,单选按钮)----类ListPreference实现(2)的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。