當前位置:編程學習大全網 - 源碼下載 - android listview怎麽加載自定義布局,還必須是在代碼裏面寫

android listview怎麽加載自定義布局,還必須是在代碼裏面寫

前面總結了如何應用android自帶的布局到ListView中去,現在如果想讓自己的ListView更生動,只需要將自己定義的布局應用到ListView中,在布局中添加壹些生動的元素,比如,圖標。

壹、為ListView每個item添加壹個圖標

先看效果:

首先定義壹個entry.xml布局文件:

[html]?view plaincopyprint?

1<span?style="font-size:18px;">?

2<?xml?version="1.0"?encoding="utf-8"?>?

3<LinearLayout?xmlns:android="/apk/res/android"?

4android:layout_width="fill_parent"?

5 android:layout_height="60dp"?

? 6 ?android:orientation="horizontal"?>?

? 7 ?<!--?圖標?-->?

8 <ImageView

9 android:layout_width="48dp"?

?10android:layout_height="48dp"?

?11android:src="@drawable/preview"?

?12android:layout_gravity="center"?

?13android:layout_marginLeft="10dp"?

? 14 ? />?

15 <!--?這裏引用android自帶的布局simple_list_item_1?-->?

16<include

? 17 ? layout="@android:layout/simple_list_item_1"?

? 18 ? />?

19</LinearLayout>?

20

21</span>?

然後將此布局文件應用到ListView中去:

1[java]?view plaincopyprint?

2<span?style="font-size:18px;">?

3public?class?ListViewDemo?extends?ListActivity?{?

4

5 ? private?List<Map<String,String>>?data?=?new?ArrayList<Map<String,String>>();?

6@Override?

7 public?void?onCreate(Bundle?savedInstanceState)?{?

8 super.onCreate(savedInstanceState);?

9 setContentView(R.layout.main);?

?10 ? Map<String,?String>?map1?=?new?HashMap<String,?String>();?

11map1.put("姓名",?"A君");?

12 data.add(map1);?

?13 ? Map<String,?String>?map2?=?new?HashMap<String,?String>();?

? 14 ?map2.put("姓名",?"B君");?

15 data.add(map2);?

16 setListAdapter(new?SimpleAdapter(this,data,R.layout.entry,?

17 new?String[]{"姓名"},?

18 new?int[]{android.R.id.text1}?

? 19 ?));?

20 }?

21

22</span>?

二、動態設置圖標

以上例子,處理的非常簡單,全部圖標都壹樣,現在要想動態設置每個item中元素,需要繼承Adapter子類,通過重寫getView()函數,為每個item都設置不同的風格。

下面創建BaseAdapter的子類MyAdapter:

[java]?view plaincopyprint?

1<span?style="font-size:18px;">?

2private?class?MyAdapter?extends?SimpleAdapter{?

3 //icons存儲圖標的id?

4 private?int[]?icons?=?null;?

?5

6private?Context?context;?

7

8 public?MyAdapter(Context?context,?List<?extends?Map<String,?>>?data,?

9 int?resource,?String[]?from,?int[]?to,int[]?icons)?{?

10super(context,?data,?resource,?from,?to);?

? 11 ?//?TODO?Auto-generated?constructor?stub?

12 this.icons?=?icons;//傳入存儲圖標id的數組?

? 13 ?this.context?=?context;?

? 14 ?}?

15

16 /*?(non-Javadoc)?

?17*?重寫getView函數,由於SimpleAdapter能處理TextView,僅僅是不能設置圖標?

18 */所以,只需要在調用父類的getView函數的基礎上,設置上相應的圖標即可?

? 19 ?@Override?

? 20 public?View?getView(int?position,?View?convertView,?ViewGroup?parent)?{?

2 1 ? //?TODO?Auto-generated?method?stub?

?22 ?ViewHolder?holder?=?null;?

?23 ? if(convertView?==?null){?

? 24 holder?=?new?ViewHolder();?

?25convertView?=?super.getView(position,?convertView,?parent);//調用父類的getView函數,設置TextView?

?26?holder.imageView?=?(ImageView)convertView.findViewById(R.id.myimageview);?

? 27 ?convertView.setTag(holder);?

? 28 ?}else?{?

29 holder?=?(ViewHolder)convertView.getTag();?

? 30 ?}?

31//從icons中隨機選出壹個,並設置作為item的圖標?

32Random?random?=?new?Random();?

33 int?index?=?random.nextInt(icons.length);?

? 34 ?holder.imageView.setImageResource(icons[index]);?

35 ?

? 36 ?return?convertView;?

? 37 ?}?

? 38

39private?class?ViewHolder{?

?40 ? ImageView?imageView;?

41 }?

42 }?

43

44</span>?

MyAdapter繼承自SimpleAdapter,重寫getView()函數,使listView中每個item的圖標都是隨機選擇的。對MyAdapter的應用如下:

[html]?view plaincopyprint?

1<span?style="font-size:18px;">?

2//數組存儲圖標id?

3private?int[]?myicons?=?{?R.drawable.preview,R.drawable.preview1,R.drawable.preview2,R.drawable.preview3};?

4 ?

5</span>?

[html]?view plaincopyprint?

1<span?style="font-size:18px;">?

2setListAdapter(new?</span><span?style="font-size:18px;color:#FF0000;">MyAdapter</span><span?style="font-size:18px;">(this,?data,?R.layout.entry,?new?String[]{"姓名"},?

3 new?int[]{android.R.id.text1},</span><span?style="font-size:18px;color:#FF0000;">?myicons</span><span?style="font-size:18px;">));//為ListView設置MyAdapter適配器?

4

5</span>?

上圖:

  • 上一篇:linux虛擬機安裝gcclinux下虛擬機安裝
  • 下一篇:《貓撲運動》賺錢方法介紹
  • copyright 2024編程學習大全網