主题 : 【代码】Android ListView布局分组的改进 复制链接 | 浏览器收藏 | 打印
欢迎加入清源的android开发交流群:314230976,加群时请验证:arm,谢谢!
级别: 侠客
UID: 94332
精华: 0
发帖: 72
金钱: 370 两
威望: 74 点
贡献值: 0 点
综合积分: 144 分
注册时间: 2013-07-14
最后登录: 2013-09-25
楼主  发表于: 2013-07-14 17:48

 【代码】Android ListView布局分组的改进


实现该ListView布局的主要代码:
1、程序主界面 SeparateListView.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
复制代码
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout xmlns:android="http://schemas.android.com/
  3. apk/res/android"
  4.     android:orientation="vertical"
  5.     android:layout_width="fill_parent"
  6.     android:layout_height="fill_parent"
  7.     >
  8.     <ListView
  9.         android:id="@+id/list"
  10.         android:layout_width="fill_parent"
  11.         android:layout_height="wrap_content">
  12.     </ListView>
  13. </LinearLayout>


3、ListView中数据部分样式布局文件group_list_item.xml
复制代码
  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
复制代码
  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开发交流群,群号是:314230976