• Android开发之ListView实现不同品种分类分隔栏的效果(非ExpandableListView实现)


    我们有时候会遇到这么一个情况。就是我在一个ListView里面须要显示的东西事实上是有种类之分的。比方我要分冬天,夏天。秋天。春天,然后在这每一个季节以下再去载入各自的条目数据。

    还有,比方我们的通讯录。我们须要按A。B,C这种字母顺序分类然后显示。

    这个怎么实现呢?

    以下我们不用ExpandableListView。而是仅仅用ListView来实现这一显示效果。



    MainActivity.java

    [java] view plaincopy
    1. package com.xzq.listviewadapter;  
    2.   
    3. import android.app.Activity;  
    4. import android.os.Bundle;  
    5. import android.view.Window;  
    6. import android.widget.ListView;  
    7.   
    8. public class MainActivity extends Activity {  
    9.   
    10.     private String[] string = { "A""B""C""D""E""F""G""H""I",  
    11.             "J""K""L""M""N""O""P""Q""R""S""T""U""V",  
    12.             "W""X""Y""Z" };  
    13.   
    14.     /** Called when the activity is first created. */  
    15.     @Override  
    16.     public void onCreate(Bundle savedInstanceState) {  
    17.         super.onCreate(savedInstanceState);  
    18.         requestWindowFeature(Window.FEATURE_NO_TITLE);  
    19.         setContentView(R.layout.main);  
    20.   
    21.         ListView listview = (ListView) findViewById(R.id.listview);  
    22.         MyCustomAdapter adapter = new MyCustomAdapter(this);  
    23.   
    24.         int size = string.length;  
    25.         for (int i = 0; i < size; i++) {  
    26.             adapter.addSeparatorItem(string[i]);  
    27.             for (int k = 0; k < 5; k++) {  
    28.                 adapter.addItem("item " + k);  
    29.             }  
    30.         }  
    31.         listview.setAdapter(adapter);  
    32.     }  
    33. }  

    MyCustomAdapter.java

    [java] view plaincopy
    1. package com.xzq.listviewadapter;  
    2.   
    3. import java.util.ArrayList;  
    4. import java.util.TreeSet;  
    5.   
    6. import android.content.Context;  
    7. import android.view.LayoutInflater;  
    8. import android.view.View;  
    9. import android.view.ViewGroup;  
    10. import android.widget.BaseAdapter;  
    11. import android.widget.TextView;  
    12.   
    13. public class MyCustomAdapter extends BaseAdapter {  
    14.   
    15.     private static final int TYPE_ITEM = 0;  
    16.     private static final int TYPE_SEPARATOR = 1;  
    17.     private static final int TYPE_MAX_COUNT = TYPE_SEPARATOR + 1;  
    18.     private ArrayList<String> data = new ArrayList<String>();  
    19.     private LayoutInflater inflater;  
    20.     private TreeSet<Integer> set = new TreeSet<Integer>();  
    21.   
    22.     public MyCustomAdapter(Context context) {  
    23.         inflater = LayoutInflater.from(context);  
    24.     }  
    25.   
    26.     public void addItem(String item) {  
    27.         data.add(item);  
    28.     }  
    29.   
    30.     public void addSeparatorItem(String item) {  
    31.         data.add(item);  
    32.         set.add(data.size() - 1);  
    33.     }  
    34.   
    35.     public int getItemViewType(int position) {  
    36.         return set.contains(position) ? TYPE_SEPARATOR : TYPE_ITEM;  
    37.     }  
    38.   
    39.     @Override  
    40.     public int getViewTypeCount() {  
    41.         return TYPE_MAX_COUNT;  
    42.     }  
    43.   
    44.     @Override  
    45.     public int getCount() {  
    46.         return data.size();  
    47.     }  
    48.   
    49.     @Override  
    50.     public Object getItem(int position) {  
    51.         return data.get(position);  
    52.     }  
    53.   
    54.     @Override  
    55.     public long getItemId(int position) {  
    56.         return position;  
    57.     }  
    58.   
    59.     @Override  
    60.     public View getView(int position, View convertView, ViewGroup parent) {  
    61.         ViewHolder holder = null;  
    62.         int type = getItemViewType(position);  
    63.         if (convertView == null) {  
    64.             holder = new ViewHolder();  
    65.             switch (type) {  
    66.             case TYPE_ITEM:  
    67.                 convertView = inflater.inflate(R.layout.item1, null);  
    68.                 holder.textView = (TextView) convertView  
    69.                         .findViewById(R.id.item1);  
    70.                 break;  
    71.             case TYPE_SEPARATOR:  
    72.                 convertView = inflater.inflate(R.layout.item2, null);  
    73.                 holder.textView = (TextView) convertView  
    74.                         .findViewById(R.id.item2);  
    75.                 break;  
    76.             }  
    77.             convertView.setTag(holder);  
    78.         } else {  
    79.             holder = (ViewHolder) convertView.getTag();  
    80.         }  
    81.         holder.textView.setText(data.get(position));  
    82.         return convertView;  
    83.     }  
    84.   
    85.     public static class ViewHolder {  
    86.         public TextView textView;  
    87.     }  
    88. }  

    main.xml

    [html] view plaincopy
    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="fill_parent"  
    5.     android:background="#ffffff"  
    6.     android:orientation="vertical" >  
    7.   
    8.     <ListView  
    9.         android:id="@+id/listview"  
    10.         android:layout_width="fill_parent"  
    11.         android:layout_height="wrap_content"  
    12.         android:text="@string/hello" />  
    13.   
    14. </LinearLayout>  


    item1.xml
    [html] view plaincopy
    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="fill_parent"  
    5.     android:background="#ffffff"  
    6.     android:orientation="vertical" >  
    7.   
    8.     <TextView  
    9.         android:id="@+id/item1"  
    10.         android:layout_width="fill_parent"  
    11.         android:layout_height="30dip"  
    12.         android:gravity="center_vertical" />  
    13.   
    14. </LinearLayout>  


    item2.xml

    [html] view plaincopy
    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="fill_parent"  
    5.     android:orientation="vertical" >  
    6.   
    7.     <TextView  
    8.         android:id="@+id/item2"  
    9.         android:layout_width="fill_parent"  
    10.         android:layout_height="30dip"  
    11.         android:background="#3c4857"  
    12.         android:gravity="center_vertical" />  
    13.   
    14. </LinearLayout>  







  • 相关阅读:
    十七、S3C2440 音频解码芯片WM8976声卡驱动移植、madplay测试
    2.3 摄像头驱动_vivi驱动程序分析
    3.1 wifi网卡RT3070在S3C2440的移植和使用
    项目简介
    2.2 vivi虚拟视频驱动测试
    2.1 摄像头V4L2驱动框架分析
    LCD驱动程序编写
    LCD驱动程序
    1. Linux内核的配置与裁减:
    第5章 docker run、exec和attach使用和区别
  • 原文地址:https://www.cnblogs.com/mthoutai/p/6903986.html
Copyright © 2020-2023  润新知