ListView分组,类似联系人分组
2016-03-22 00:05
363 查看
现在网上的关于ListView分组都不知道扯什么鬼,所以有必要写一个Demo出来,福利大家
主要思想:通过对比 分组的栏目是否一样来是否隐藏该position的栏目,直接贴代码,简单明了
1、MainActivity
实体类People
适配器adapter
布局MainActivity
item
这就是所有的代码了,非常简单,而且很适用多种情况
主要思想:通过对比 分组的栏目是否一样来是否隐藏该position的栏目,直接贴代码,简单明了
1、MainActivity
package com.yongbiao.testlistviewsection; import android.content.Context; import android.text.TextUtils; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.TextView; import java.util.HashMap; import java.util.List; /** * Created by Administrator on 2016/3/21. */ public class ContactAdapter extends BaseAdapter { private final HashMap<Object, Object> indexes; private final String[] sections; private Context mContext; private List<People> mList ; private LayoutInflater inflater; private OnPeopleClickListener onPeopleClickListener ; public ContactAdapter(Context mContext, List<People> mList) { this.mContext = mContext; this.mList = mList; this.inflater = LayoutInflater.from(mContext); int size = mList.size(); indexes = new HashMap<>(); sections = new String[size]; for (int index = 0; index < size; index++){ //当前 String currentFirstName = mList.get(index).getFirstName(); //上个 String previousFirstName = index >= 1 ? mList.get(index-1).getFirstName() : ""; if (!TextUtils.equals(currentFirstName, previousFirstName)){ indexes.put(currentFirstName, index); sections[index] = currentFirstName; } } } public void appendPeople(People people) { mList.add(people); this.notifyDataSetChanged(); } @Override public int getCount() { return mList == null ? 0: mList.size(); } @Override public Object getItem(int position) { return mList == null ? null : mList.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { ContactViewHolder holder ; if (convertView == null){ convertView = inflater.inflate(R.layout.item, parent, false); holder = new ContactViewHolder(); holder.tvFirstName = (TextView) convertView.findViewById(R.id.tv_item_first); holder.tvLastName = (TextView) convertView.findViewById(R.id.tv_item_second); convertView.setTag(holder); }else{ holder = (ContactViewHolder) convertView.getTag(); } if (position >= 0){ final String lastName = mList.get(position).getLastName() ; holder.tvLastName.setText(lastName); final String currentFirstName = mList.get(position).getFirstName() ; String previousFirstName = position >= 1 ? mList.get(position-1).getFirstName() : ""; if (!TextUtils.equals(currentFirstName, previousFirstName)) { holder.tvFirstName.setVisibility(View.VISIBLE); holder.tvFirstName.setText(currentFirstName); } else { holder.tvFirstName.setVisibility(View.GONE); } holder.tvLastName.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (onPeopleClickListener != null){ onPeopleClickListener.onPeopleClick(currentFirstName,lastName); } } }); } return convertView; } public void setOnPeopleClickListener (OnPeopleClickListener mOnPeopleClickListener) { this.onPeopleClickListener = mOnPeopleClickListener ; } public static class ContactViewHolder{ TextView tvFirstName; TextView tvLastName; } public interface OnPeopleClickListener{ void onPeopleClick(String firstName,String lastName); } }
实体类People
package com.yongbiao.testlistviewsection; /** * Created by Administrator on 2016/3/21. */ public class People { private String firstName ; private String lastName ; public People(String firstName, String lastName) { this.firstName = firstName; this.lastName = lastName; } public String getFirstName() { return firstName; } public String getLastName() { return lastName; } }
适配器adapter
package com.yongbiao.testlistviewsection; import android.content.Context; import android.text.TextUtils; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.TextView; import java.util.HashMap; import java.util.List; /** * Created by Administrator on 2016/3/21. */ public class ContactAdapter extends BaseAdapter { private final HashMap<Object, Object> indexes; private final String[] sections; private Context mContext; private List<People> mList ; private LayoutInflater inflater; private OnPeopleClickListener onPeopleClickListener ; public ContactAdapter(Context mContext, List<People> mList) { this.mContext = mContext; this.mList = mList; this.inflater = LayoutInflater.from(mContext); int size = mList.size(); indexes = new HashMap<>(); sections = new String[size]; for (int index = 0; index < size; index++){ //当前 String currentFirstName = mList.get(index).getFirstName(); //上个 String previousFirstName = index >= 1 ? mList.get(index-1).getFirstName() : ""; if (!TextUtils.equals(currentFirstName, previousFirstName)){ indexes.put(currentFirstName, index); sections[index] = currentFirstName; } } } public void appendPeople(People people) { mList.add(people); this.notifyDataSetChanged(); } @Override public int getCount() { return mList == null ? 0: mList.size(); } @Override public Object getItem(int position) { return mList == null ? null : mList.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { ContactViewHolder holder ; if (convertView == null){ convertView = inflater.inflate(R.layout.item, parent, false); holder = new ContactViewHolder(); holder.tvFirstName = (TextView) convertView.findViewById(R.id.tv_item_first); holder.tvLastName = (TextView) convertView.findViewById(R.id.tv_item_second); convertView.setTag(holder); }else{ holder = (ContactViewHolder) convertView.getTag(); } if (position >= 0){ final String lastName = mList.get(position).getLastName() ; holder.tvLastName.setText(lastName); final String currentFirstName = mList.get(position).getFirstName() ; String previousFirstName = position >= 1 ? mList.get(position-1).getFirstName() : ""; if (!TextUtils.equals(currentFirstName, previousFirstName)) { holder.tvFirstName.setVisibility(View.VISIBLE); holder.tvFirstName.setText(currentFirstName); } else { holder.tvFirstName.setVisibility(View.GONE); } holder.tvLastName.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (onPeopleClickListener != null){ onPeopleClickListener.onPeopleClick(currentFirstName,lastName); } } }); } return convertView; } public void setOnPeopleClickListener (OnPeopleClickListener mOnPeopleClickListener) { this.onPeopleClickListener = mOnPeopleClickListener ; } public static class ContactViewHolder{ TextView tvFirstName; TextView tvLastName; } public interface OnPeopleClickListener{ void onPeopleClick(String firstName,String lastName); } }
布局MainActivity
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity"> <Button android:id="@+id/add" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="add"/> <ListView android:id="@+id/lv" android:layout_below="@+id/add" android:layout_width="match_parent" android:layout_height="match_parent"></ListView> </RelativeLayout>
item
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical" tools:ignore="RtlHardcoded"> <TextView android:id="@+id/tv_item_first" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="18sp" android:clickable="false"/> <TextView android:id="@+id/tv_item_second" android:layout_width="match_parent" android:layout_height="48dp" android:paddingLeft="16dp" android:paddingRight="10dp" android:background="?android:attr/selectableItemBackground" android:clickable="true" android:gravity="center_vertical" android:textSize="16dp" /> <View android:layout_width="match_parent" android:layout_height="1px" android:layout_marginLeft="16dp" android:layout_marginRight="10dp" android:background="#000000"/> </LinearLayout>
这就是所有的代码了,非常简单,而且很适用多种情况
相关文章推荐
- ipc命令
- 数据库实验一 SQL Service的安装
- ubuntu terminal 介绍及相关命令
- Zend Framework生成验证码并实现验证码验证功能(附demo源码下载)
- Zend Framework分页类用法详解
- Zend Framework实现将session存储在memcache中的方法
- Zend Framework实现具有基本功能的留言本(附demo源码下载)
- 【顺序表】 c语言的顺序表
- Zend Framework实现留言本分页功能(附demo源码下载)
- PHP实现补齐关闭的HTML标签
- Oracle Concepts - General Guidelines for Shared Pool Sizing
- Zend Framework框架路由机制代码分析
- Zend Framework框架Smarty扩展实现方法
- Zend Framework实现多服务器共享SESSION数据的方法
- Zend Framework教程之Zend_Registry对象用法分析
- php获取文件后缀的9种方法
- 你在编程的时候浪费了多少时间?
- 使用struts2+Ajax+jquery验证用户名是否已被注册
- 浅析C/C++,Java,PHP,JavaScript,Json数组、对象赋值时最后一个元素后面是否可以带逗号
- 酷炫jQuery全屏3D焦点图动画效果