生活随笔
收集整理的這篇文章主要介紹了
自定义Dialog(图片,文字说明,单选按钮)----类ListPreference实现(2)
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
在上一篇 中,只是實(shí)現(xiàn)一個(gè)perference,但是點(diǎn)擊以后沒(méi)有響應(yīng)事件,我們可以定義一個(gè)一個(gè)Dialog,Dialog選項(xiàng)里面需要有圖片,文字說(shuō)明,后面還需要一個(gè)單選按鈕,所以自己寫(xiě)了一個(gè)demo,效果圖如下:
??????? 功能的完成是使用Dialog的addView()方法,把一個(gè)ListView添加進(jìn)去。ListView控件里面使用了ImageView和CheckedTextView控件,CheckedTextView是一個(gè)提供文字和選擇框的控件。如果對(duì)于CheckedTextView不熟悉,請(qǐng)自己查下文檔,在這里就不在多說(shuō)。
主要功能代碼如下:
?
[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"???????????????/>??? ?
應(yīng)該特別注意listview.xml不要把他寫(xiě)在一個(gè)父控件下如:LinearLayout等,如果這樣會(huì)出現(xiàn)錯(cuò)誤,。還有就是如果你listview添加過(guò)多選項(xiàng),當(dāng)單擊的時(shí)候會(huì)出現(xiàn)空指針異常。
?
另外,Demo源代碼可以在此下載。
http://download.csdn.net/source/3494251
?
2012年7月19號(hào)補(bǔ)充:
???????????當(dāng)listView中含有超過(guò)一屏幕的時(shí)候,采用以上方法會(huì)有空指針異常,是因?yàn)槲达@示的View為空,但是上面代碼中要遍歷所有代碼,所以為空。如何優(yōu)化,可以參考
ListView Item 選擇問(wèn)題解決之道
這篇文章。
?
???????
轉(zhuǎn)載于:https://www.cnblogs.com/kevincode/p/3838569.html
總結(jié)
以上是生活随笔為你收集整理的自定义Dialog(图片,文字说明,单选按钮)----类ListPreference实现(2)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。