Android ListView列表分组

运行效果:


main.xml





  

  


list_items.xml

 





  


list_items_tag.xml





  


MyAdapter.java

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;

 

public class MyAdapter extends BaseAdapter {

 

  private LayoutInflater mInflater;

 

  private List> listData;

 

  private List> splitData;

 

  public MyAdapter(Context context,

     List> listData,

     List> 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

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;

 

public class MainActivity extends Activity {

 

  private List> mylist = new ArrayList>();

  private List> splitList = new ArrayList>();

 

  @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 mp = new HashMap();

   mp.put("itemTitle", "A");

   mylist.add(mp);

   splitList.add(mp);

 

   for (int i = 0; i < 3; i++) {

     Map map = new HashMap();

     map.put("itemTitle", "文章1-" + i);

     mylist.add(map);

   }

 

   mp = new HashMap();

   mp.put("itemTitle", "B");

   mylist.add(mp);

   splitList.add(mp);

 

   for (int i = 0; i < 6; i++) {

     Map map = new HashMap();

     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)


这个方法刚好用来禁用标签项的响应事件。

 

@Override

public boolean isEnabled(int position) {

  if(splitData.contains(listData.get(position))) {

   returnfalse;

  }

  returnsuper.isEnabled(position);

}


现在标签项不会再有任何触控效果了,犹如一块死木板。


原地址:http://blog.sina.com.cn/s/blog_4ca9ceef0100za7f.html

你可能感兴趣的:(android)