Android ListView分組佈局改進

由於是在網上轉載的一篇文章,在這裡就不多說廢話瞭,首先看一下最終的效果圖:


 
然後是實現該ListView佈局的主要代碼:
1、程序主界面 SeparateListView.java
[java]
1. package whu.iss.wuxianglong;  
2.   
3. import java.util.ArrayList;  
4. import java.util.List;  
5.   
6. import android.app.Activity;  
7. import android.content.Context;  
8. import android.os.Bundle;  
9. import android.view.LayoutInflater;  
10. import android.view.View;  
11. import android.view.ViewGroup;  
12. import android.widget.ArrayAdapter;  
13. import android.widget.ListView;  
14. import android.widget.TextView;  
15.   
16. public class SeparateListView extends Activity {  
17.     ListView listView;  
18.     MyAdapter myAdapter;  
19.     public List<String> listTag = new ArrayList<String>();  
20.   
21.     /** Called when the activity is first created. */  
22.     @Override  
23.     public void onCreate(Bundle savedInstanceState) {  
24.         super.onCreate(savedInstanceState);  
25.         setContentView(R.layout.main);  
26.           
27.         listView = (ListView) findViewById(R.id.list);  
28.         myAdapter = new MyAdapter(this,  
29.                 android.R.layout.simple_expandable_list_item_1, getData());  
30.         listView.setAdapter(myAdapter);  
31.     }  
32.     private List<String> getData() {  
33.         List<String> data = new ArrayList<String>();  
34.         int i = 0;  
35.   
36.         data.add("A");  
37.         listTag.add("A");  
38.         data.add("aa試數據" + (i++));  
39.         data.add("a試數據" + (i++));  
40.         data.add("aa試數據" + (i++));  
41.         listTag.add("B");  
42.         data.add("B");  
43.         data.add("bb試數據" + (i++));  
44.         data.add("b試數據" + (i++));  
45.         data.add("b試數據" + (i++));         
46.         data.add("b試數據" + (i++));  
47.         listTag.add("C");  
48.         data.add("C");  
49.         data.add("c測試數據" + (i++));  
50.         data.add("c測試數據" + (i++));  
51.         listTag.add("D");  
52.         data.add("D");  
53.         data.add("d測試數據" + (i++));  
54.         data.add("d測試數據" + (i++));  
55.         data.add("d測試數據" + (i++));  
56.         listTag.add("E");  
57.         data.add("E");  
58.         data.add("e測試數據" + (i++));  
59.         data.add("e測試數據" + (i++));  
60.         data.add("e測試數據" + (i++));  
61.         listTag.add("F");  
62.         data.add("F" );  
63.         data.add("f測試數據" + (i++));  
64.         return data;  
65.     }  
66.   
67.       
68.     class MyAdapter extends ArrayAdapter<String> {  
69.   
70.         public MyAdapter(Context context,  int textViewResourceId,  
71.                 List<String> objects) {  
72.             super(context,  textViewResourceId, objects);  
73.           
74.         }  
75.   
76.         @Override  
77.         public boolean areAllItemsEnabled() {  
78.             return false;   
79.         }  
80.   
81.         @Override  
82.         public boolean isEnabled(int position) {  
83.             // 如果-開頭,則該項不可選   
84.             return !listTag.contains(getItem(position));   
85.         }  
86.   
87.         @Override  
88.         public View getView(int position, View convertView, ViewGroup parent) {  
89.             View view = convertView;  
90.           //根據標簽類型加載不通的佈局模板   
91.             if(listTag.contains(getItem(position))){  
92.                 //如果是標簽項  
93.                 view = LayoutInflater.from(getContext()).inflate(R.layout.group_list_item_tag, null);  
94.             }else{  
95.                 //否則就是數據項  
96.                 view = LayoutInflater.from(getContext()).inflate(R.layout.group_list_item, null);  
97.             }  
98.           //顯示名稱  
99.             TextView textView = (TextView) view.findViewById(R.id.group_list_item_text);  
100.             textView.setText(getItem(position));  
101.           //返回重寫的view  
102.             return view;  
103.         }  
104.           
105.     }  
106. } 
2、程序主界面佈局文件main.xml
[html]
1. <?xml version="1.0" encoding="utf-8"?>  
2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
3.     android:orientation="vertical"  
4.     android:layout_width="fill_parent"  
5.     android:layout_height="fill_parent"  
6.     >  
7.     <ListView  
8.         android:id="@+id/list"  
9.         android:layout_width="fill_parent"  
10.         android:layout_height="wrap_content">  
11.     </ListView>  
12. </LinearLayout> 
3、ListView中數據部分樣式佈局文件group_list_item.xml
[html]
1. <?xml version="1.0" encoding="utf-8"?>  
2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
3.     android:orientation="horizontal"  
4.     android:layout_width="fill_parent"  
5.     android:layout_height="wrap_content"  
6.     android:padding="5dip">  
7.     <ImageView   
8.        android:src="@drawable/icon"  
9.        android:layout_width="50px"  
10.        android:layout_height="50px">  
11.     </ImageView>  
12.     <TextView  
13.        android:id="@+id/group_list_item_text"   
14.        android:layout_width="wrap_content"   
15.        android:layout_height="fill_parent"  
16.        android:paddingLeft="5dip"  
17.        android:gravity="center_vertical">  
18.     </TextView>  
19. </LinearLayout> 
4、ListView中分組標志行的樣式佈局文件group_list_item_tag.xml
[html]
1. <?xml version="1.0" encoding="utf-8"?>  
2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
3.     android:layout_width="fill_parent"  
4.     android:layout_height="wrap_content"  
5.     android:background="#555555"  
6.     android:paddingLeft="10dip">  
7.     <TextView  
8.        android:id="@+id/group_list_item_text"   
9.        android:layout_width="wrap_content"   
10.        android:layout_height="20dip"  
11.        android:textColor="#ffffff"  
12.        android:gravity="center_vertical">  
13.     </TextView>  
14. </LinearLayout> 

 

摘自 與時俱進

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。