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>  
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
	android:orientation="horizontal" android:layout_width="fill_parent"
	android:layout_height="fill_parent">
	<ListView android:layout_width="fill_parent"
		android:layout_height="wrap_content" android:id="@+id/MyListView">
	</ListView>
</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>  
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
	android:orientation="vertical" android:layout_width="fill_parent"
	android:layout_height="wrap_content" android:id="@+id/myListItem"
	android:paddingBottom="4dip" android:paddingLeft="12dip"
	android:paddingRight="12dip">
	<TextView android:layout_height="wrap_content"
		android:layout_width="fill_parent" android:id="@+id/itemTitle"
		android:textSize="20dip" />
</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>  
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
	android:layout_width="fill_parent" android:layout_height="wrap_content"
	android:background="#555555" android:paddingLeft="10dip">
	<TextView android:id="@+id/itemTitle" android:layout_width="wrap_content"
		android:layout_height="20dip" android:textColor="#ffffff"
		android:gravity="center_vertical" />
</LinearLayout>


MyAdapter.java
Java代码
p ackage 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. }  
package com.iaiai;

import java.util.List;
import java.util.Map;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;

/**
 * 
 * <p>
 * Title: MyAdapter.java
 * </p>
 * <p>
 * E-Mail: 176291935@qq.com
 * </p>
 * <p>
 * QQ: 176291935
 * </p>
 * <p>
 * Http: iaiai.iteye.com
 * </p>
 * <p>
 * Create time: 2011-10-10
 * </p>
 * 
 * @author 丸子
 * @version 0.0.1
 */
public class MyAdapter extends BaseAdapter {

	private LayoutInflater mInflater;

	private List<Map<String, String>> listData;

	private List<Map<String, String>> splitData;

	public MyAdapter(Context context,
			List<Map<String, String>> listData,
			List<Map<String, String>> splitData) {
		this.mInflater = LayoutInflater.from(context);
		this.listData = listData;
		this.splitData = splitData;
	}

	@Override
	public int getCount() {
		return listData.size();
	}

	@Override
	public Object getItem(int position) {
		return listData.get(position);
	}

	@Override
	public long getItemId(int position) {
		return position;
	}

	@Override
	public boolean isEnabled(int position) {
		if (splitData.contains(listData.get(position))) {
			return false;
		}
		return super.isEnabled(position);
	}

	@Override
	public View getView(final int position, View convertView, ViewGroup parent) {
		if (splitData.contains(listData.get(position))) {
			convertView = mInflater.inflate(R.layout.list_items_tag, null);
		} else {
			convertView = mInflater.inflate(R.layout.list_items, null);
		}

		TextView textView = (TextView) convertView.findViewById(R.id.itemTitle);
		textView.setText(listData.get(position).get("itemTitle"));

		return convertView;
	}

}


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. }  
package com.iaiai;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import android.app.Activity;
import android.os.Bundle;
import android.widget.ListView;

/**
 * 
 * <p>
 * Title: MainActivity.java
 * </p>
 * <p>
 * E-Mail: 176291935@qq.com
 * </p>
 * <p>
 * QQ: 176291935
 * </p>
 * <p>
 * Http: iaiai.iteye.com
 * </p>
 * <p>
 * Create time: 2011-10-10
 * </p>
 * 
 * @author 丸子
 * @version 0.0.1
 */
public class MainActivity extends Activity {

	private List<Map<String, String>> mylist = new ArrayList<Map<String, String>>();
	private List<Map<String, String>> splitList = new ArrayList<Map<String, String>>();

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);

		ListView list = (ListView) findViewById(R.id.MyListView);

		setData(); // 设置数据

		// 配置适配器
		MyAdapter adapter = new MyAdapter(this, mylist, splitList); // 布局里的控件id
		// 添加并且显示
		list.setAdapter(adapter);
	}

	private void setData() {
		// 组织数据源
		Map<String, String> mp = new HashMap<String, String>();
		mp.put("itemTitle", "A");
		mylist.add(mp);
		splitList.add(mp);

		for (int i = 0; i < 3; i++) {
			Map<String, String> map = new HashMap<String, String>();
			map.put("itemTitle", "文章1-" + i);
			mylist.add(map);
		}

		mp = new HashMap<String, String>();
		mp.put("itemTitle", "B");
		mylist.add(mp);
		splitList.add(mp);

		for (int i = 0; i < 6; i++) {
			Map<String, String> map = new HashMap<String, String>();
			map.put("itemTitle", "文章2-" + i);
			mylist.add(map);
		}
	}

}


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

禁止标签项的响应事件,父类BaseAdapter中提供了isEnable的()方法,我们看看这个方法:
Java代码   
  1. //默认情况,如果这个方法不是分割符,返回true   
  2. //分隔符是无选中和无点击事件的   
  3. //说白了,你想不想把改position项当做分隔符,想的话就返回false,否则返回true   
  4. public boolean isEnabled (int position)  
//默认情况,如果这个方法不是分割符,返回true
//分隔符是无选中和无点击事件的
//说白了,你想不想把改position项当做分隔符,想的话就返回false,否则返回true
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. }  
@Override
public boolean isEnabled(int position) {
	if (splitData.contains(listData.get(position))) {
		return false;
	}
	return super.isEnabled(position);
}

现在标签项不会再有任何触控效果了,犹如一块死木板。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值