Android 列表之分组ListView

 运行效果:


main.xml
Java代码 复制代码 收藏代码
  1. <?xml version="1.0" encoding="utf-8"?>   
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  3.     android:orientation="horizontal" android:layout_width="fill_parent"  
  4.     android:layout_height="fill_parent">   
  5.     <ListView android:layout_width="fill_parent"  
  6.         android:layout_height="wrap_content" android:id="@+id/MyListView">   
  7.     </ListView>   
  8. </LinearLayout>  


list_items.xml
Java代码 复制代码 收藏代码
  1. <?xml version="1.0" encoding="utf-8"?>   
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  3.     android:orientation="vertical" android:layout_width="fill_parent"  
  4.     android:layout_height="wrap_content" android:id="@+id/myListItem"  
  5.     android:paddingBottom="4dip" android:paddingLeft="12dip"  
  6.     android:paddingRight="12dip">   
  7.     <TextView android:layout_height="wrap_content"  
  8.         android:layout_width="fill_parent" android:id="@+id/itemTitle"  
  9.         android:textSize="20dip" />   
  10. </LinearLayout>  


list_items_tag.xml
Java代码  
  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" android:layout_height="wrap_content"  
  4.     android:background="#555555" android:paddingLeft="10dip">   
  5.     <TextView android:id="@+id/itemTitle" android:layout_width="wrap_content"  
  6.         android:layout_height="20dip" android:textColor="#ffffff"  
  7.         android:gravity="center_vertical" />   
  8. </LinearLayout>  


MyAdapter.java
Java代码
package com.iaiai;   
  1.   
  2. import java.util.List;   
  3. import java.util.Map;   
  4.   
  5. import android.content.Context;   
  6. import android.view.LayoutInflater;   
  7. import android.view.View;   
  8. import android.view.ViewGroup;   
  9. import android.widget.BaseAdapter;   
  10. import android.widget.TextView;   
  11.   
  12. /**  
  13.  *   
  14.  * <p>  
  15.  * Title: MyAdapter.java  
  16.  * </p>  
  17.  * <p>  
  18.  * E-Mail: 176291935@qq.com  
  19.  * </p>  
  20.  * <p>  
  21.  * QQ: 176291935  
  22.  * </p>  
  23.  * <p>  
  24.  * Http: iaiai.iteye.com  
  25.  * </p>  
  26.  * <p>  
  27.  * Create time: 2011-10-10  
  28.  * </p>  
  29.  *   
  30.  * @author 丸子  
  31.  * @version 0.0.1  
  32.  */  
  33. public class MyAdapter extends BaseAdapter {   
  34.   
  35.     private LayoutInflater mInflater;   
  36.   
  37.     private List<Map<String, String>> listData;   
  38.   
  39.     private List<Map<String, String>> splitData;   
  40.   
  41.     public MyAdapter(Context context,   
  42.             List<Map<String, String>> listData,   
  43.             List<Map<String, String>> splitData) {   
  44.         this.mInflater = LayoutInflater.from(context);   
  45.         this.listData = listData;   
  46.         this.splitData = splitData;   
  47.     }   
  48.   
  49.     @Override  
  50.     public int getCount() {   
  51.         return listData.size();   
  52.     }   
  53.   
  54.     @Override  
  55.     public Object getItem(int position) {   
  56.         return listData.get(position);   
  57.     }   
  58.   
  59.     @Override  
  60.     public long getItemId(int position) {   
  61.         return position;   
  62.     }   
  63.   
  64.     @Override  
  65.     public boolean isEnabled(int position) {   
  66.         if (splitData.contains(listData.get(position))) {   
  67.             return false;   
  68.         }   
  69.         return super.isEnabled(position);   
  70.     }   
  71.   
  72.     @Override  
  73.     public View getView(final int position, View convertView, ViewGroup parent) {   
  74.         if (splitData.contains(listData.get(position))) {   
  75.             convertView = mInflater.inflate(R.layout.list_items_tag, null);   
  76.         } else {   
  77.             convertView = mInflater.inflate(R.layout.list_items, null);   
  78.         }   
  79.   
  80.         TextView textView = (TextView) convertView.findViewById(R.id.itemTitle);   
  81.         textView.setText(listData.get(position).get("itemTitle"));   
  82.   
  83.         return convertView;   
  84.     }   
  85.   
  86. }  


MainActivity.java
Java代码  
  1. package com.iaiai;   
  2.   
  3. import java.util.ArrayList;   
  4. import java.util.HashMap;   
  5. import java.util.List;   
  6. import java.util.Map;   
  7.   
  8. import android.app.Activity;   
  9. import android.os.Bundle;   
  10. import android.widget.ListView;   
  11.   
  12. /**  
  13.  *   
  14.  * <p>  
  15.  * Title: MainActivity.java  
  16.  * </p>  
  17.  * <p>  
  18.  * E-Mail: 176291935@qq.com  
  19.  * </p>  
  20.  * <p>  
  21.  * QQ: 176291935  
  22.  * </p>  
  23.  * <p>  
  24.  * Http: iaiai.iteye.com  
  25.  * </p>  
  26.  * <p>  
  27.  * Create time: 2011-10-10  
  28.  * </p>  
  29.  *   
  30.  * @author 丸子  
  31.  * @version 0.0.1  
  32.  */  
  33. public class MainActivity extends Activity {   
  34.   
  35.     private List<Map<String, String>> mylist = new ArrayList<Map<String, String>>();   
  36.     private List<Map<String, String>> splitList = new ArrayList<Map<String, String>>();   
  37.   
  38.     @Override  
  39.     protected void onCreate(Bundle savedInstanceState) {   
  40.         super.onCreate(savedInstanceState);   
  41.         setContentView(R.layout.main);   
  42.   
  43.         ListView list = (ListView) findViewById(R.id.MyListView);   
  44.   
  45.         setData(); // 设置数据   
  46.   
  47.         // 配置适配器   
  48.         MyAdapter adapter = new MyAdapter(this, mylist, splitList); // 布局里的控件id   
  49.         // 添加并且显示   
  50.         list.setAdapter(adapter);   
  51.     }   
  52.   
  53.     private void setData() {   
  54.         // 组织数据源   
  55.         Map<String, String> mp = new HashMap<String, String>();   
  56.         mp.put("itemTitle""A");   
  57.         mylist.add(mp);   
  58.         splitList.add(mp);   
  59.   
  60.         for (int i = 0; i < 3; i++) {   
  61.             Map<String, String> map = new HashMap<String, String>();   
  62.             map.put("itemTitle""文章1-" + i);   
  63.             mylist.add(map);   
  64.         }   
  65.   
  66.         mp = new HashMap<String, String>();   
  67.         mp.put("itemTitle""B");   
  68.         mylist.add(mp);   
  69.         splitList.add(mp);   
  70.   
  71.         for (int i = 0; i < 6; i++) {   
  72.             Map<String, String> map = new HashMap<String, String>();   
  73.             map.put("itemTitle""文章2-" + i);   
  74.             mylist.add(map);   
  75.         }   
  76.     }   
  77.   
  78. }  


========================================================================
以上为示例所有代码,以下为说明

禁止标签项的响应事件,父类BaseAdapter中提供了isEnable的()方法,我们看看这个方法:
Java代码  
  1. //默认情况,如果这个方法不是分割符,返回true   
  2. //分隔符是无选中和无点击事件的   
  3. //说白了,你想不想把改position项当做分隔符,想的话就返回false,否则返回true   
  4. public boolean isEnabled (int position)  

这个方法刚好用来禁用标签项的响应事件。
Java代码  
  1. @Override  
  2. public boolean isEnabled(int position) {   
  3.     if (splitData.contains(listData.get(position))) {   
  4.         return false;   
  5.     }   
  6.     return super.isEnabled(position);   
  7. }  

现在标签项不会再有任何触控效果了,犹如一块死木板。
阅读更多
个人分类: Android 基础开发
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭