Android ListView分组布局改进

由于是在网上转载的一篇文章,在这里就不多说废话了,首先看一下最终的效果图:

Android ListView分组布局改进

然后是实现该ListView布局的主要代码:

1、程序主界面 SeparateListView.java

[java]  view plain copy print ?
  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]  view plain copy print ?
  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]  view plain copy print ?
  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]  view plain copy print ?
  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>  

你可能感兴趣的:(Android ListView分组布局改进)