Android ExpandableListView分组效果

原创 2015年11月19日 12:56:17

效果如图:


package com.example.expandablelistview;

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

import org.apache.http.MethodNotSupportedException;

import android.app.Activity;
import android.content.Context;
import android.graphics.Color;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.BaseExpandableListAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ExpandableListView;
import android.widget.ExpandableListView.OnGroupClickListener;
import android.widget.TextView;

public class MainActivity extends Activity {
	
	private MyExpandableListAdapter mExpandableListAdapter;
	
	private List<HashMap<String,Object>> list;
	List<String> list_child;
	
	private final String GROUP = "group";
	private final String CHILD = "child";
	
	private EditText edit;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		
		list = new ArrayList<HashMap<String,Object>>();
		//分组的标签
		String[] groups = {"A","B","C","D","E","F"};
		
		Random rand = new Random();
		for(int i=0;i<groups.length;i++){
			HashMap<String,Object> map = new HashMap<String, Object>();
			map.put(GROUP, groups[i]);
			
			list_child = new ArrayList<String>();
			for(int j=0;j<5;j++){
				list_child.add("联系人"+j);
			}
			map.put(CHILD, list_child);
			
			list.add(map);
			
		}
		
		edit = (EditText) findViewById(R.id.edit);
		ExpandableListView elv = (ExpandableListView) findViewById(R.id.expandablelistview);
		
		Button btn = (Button) findViewById(R.id.btn);
		btn.setOnClickListener(new OnClickListener() {
			
			@Override
			public void onClick(View v) {
				addChild(2,2);
			}
		});
		
		mExpandableListAdapter = new MyExpandableListAdapter(this);
				
		elv.setAdapter(mExpandableListAdapter);	
		
		  // 演示  
		  
        // 展开0组  
        elv.expandGroup(0);  
        // 收起1组  
        elv.collapseGroup(1);  
        // 展开2组  
        elv.expandGroup(2);  
        elv.setOnGroupClickListener(new OnGroupClickListener() {  
        	  
            @Override  
            public boolean onGroupClick(ExpandableListView arg0, View arg1, int arg2, long arg3) {  
                // Android默认是返回false。  
                // 如果返回true,那么,不管是点击已展开的分组还是未展开的分组,都不会相应展开或者收缩的,也就是说这个ExpandableListView将成为一个‘死’的ListView  
                return false;  
            }  
        });
	}
	
	private void addChild(int pos,int index){
		
		HashMap<String, Object> map = list.get(pos);
		List<String> list = (List<String>) map.get(CHILD);
		list.add(index, "xlg");
		
		
	}
	
	public class MyExpandableListAdapter extends BaseExpandableListAdapter{
		
		private Context mcontext;
		
		private LayoutInflater inflater;
		 
		public MyExpandableListAdapter(Context context) {
			
			this.mcontext = context;
			
			inflater = LayoutInflater.from(context);
		}
		
		@Override
		public int getGroupCount() {
			return list.size();
		}

		@Override
		public int getChildrenCount(int groupPosition) {
			
			List<String> child = (List<String>) list.get(groupPosition).get(CHILD);
			return child.size();
			
		}

		@Override
		public Object getGroup(int groupPosition) {
			return list.get(groupPosition).get(GROUP);
		}

		@Override
		public Object getChild(int groupPosition, int childPosition) {
			
			List<String> child = (List<String>) list.get(groupPosition).get(CHILD);
			return child.get(childPosition);
		}

		@Override
		public long getGroupId(int groupPosition) {
			return groupPosition;
		}

		@Override
		public long getChildId(int groupPosition, int childPosition) {
			// TODO Auto-generated method stub
			return childPosition;
		}

		@Override
		public boolean hasStableIds() {
			// TODO Auto-generated method stub
			return false;
		}

		@Override
		public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) {
			
			convertView  = inflater.inflate(android.R.layout.simple_list_item_1, null);
			
			TextView text = (TextView) convertView.findViewById(android.R.id.text1);
			
			text.setText(getGroup(groupPosition)+"");
			
			text.setBackgroundColor(Color.RED);
			return convertView;
		}

		@Override
		public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView,
				ViewGroup parent) {
			
			convertView = inflater.inflate(android.R.layout.simple_list_item_1, null);
			
			TextView text = (TextView) convertView.findViewById(android.R.id.text1);
			
			text.setText(getChild(groupPosition, childPosition)+"");
			
			text.setBackgroundColor(Color.GRAY);
			return convertView;
		}

		@Override
		public boolean isChildSelectable(int groupPosition, int childPosition) {
			// TODO Auto-generated method stub
			return false;
		}
		
	}
}

需要的布局文件:

<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="match_parent"
  	android:orientation="vertical"
    tools:context="com.example.expandablelistview.MainActivity" >

   <ExpandableListView 
       android:id="@+id/expandablelistview"
       android:layout_width="match_parent"
       android:layout_height="wrap_content"
       android:layout_weight="1">
       
       
   </ExpandableListView>
   
   <LinearLayout 
       android:layout_width="match_parent"
       android:layout_height="wrap_content"
       android:orientation="horizontal"
       android:background="#e0e0e0">
       
       <EditText 
           android:id="@+id/edit"
           android:layout_width="wrap_content"
           android:layout_height="wrap_content"
           android:layout_weight="1"/>
       
       <Button 
           android:id="@+id/btn"
           android:layout_width="wrap_content"
           android:layout_height="wrap_content"
           android:text="发送"
           android:background="@android:color/holo_red_dark"/>
   </LinearLayout>
</LinearLayout>


相关文章推荐

Android中ExpandableListView的使用(一)

ExpandableListView是可扩展的下拉列表,它的可扩展性在于点击父item可以拉下或收起列表,适用于一些场景的使用...

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载

Android中ExpandableListView常用属性总结

ExpandableListView的常用属性总结,以及一些样式的具体实现

Android UI视图效果篇之仿QQ好友列表分组悬浮PinnedHeaderExpandableListView

楼主是在平板上测试的,图片稍微有点大,大家看看效果就好 接下来贴源码: PinnedHeaderExpandableListView.java  要注意的是 在 onGroupClick方法中p...
  • h7870181
  • h7870181
  • 2014年10月23日 17:15
  • 25589

QQ分组效果(ExpandableListView)的使用

QQ分组效果图如下: JAVA 代码package com.example.days11expandablelistview0002;import java.util.ArrayList; ...

ExpandableListView万能adapter封装轻松实现分组列表及单选效果

在项目开发中有时候会碰到类似于QQ好友列表的分组列表效果的需求,实现的方式有很多种,可以用ListView、RecyclerView等方式实现,其实系统提供了ExpandableListView可以很...

Android之实现QQ好友分组(ExpandableListView)

在项目开发中,也许我们遇到过ListView中嵌套ListView,但谷歌建议我们最好别这样做,因此他们写好了一个ExpandableListView类,他继承ListView,可以实现ListVie...

Android中使用ExpandableListView实现好友分组

一个视图显示垂直滚动两级列表中的条目。这不同于列表视图,允许两个层次,类似于QQ的好友分组。要实现这个效果的整体思路为: 1.要给ExpandableListView 设置适配器,那么必须先设置...

Android 仿QQ好友分组列表、ExpandableListView的使用详解

ListView只能显示一级列表,如果我们需要像QQ好友列表的那样的效果,就需要用到ExpandableListView,入门新手可能对该控件不是很熟悉,下面就详解一下基本用法,其实跟ListView...

ExpandableListView实例(三)_实现QQ中"未分组"效果和"未分组"不可编辑删除功能

本例说明: 实现QQ中"未分组"效果和"未分组"不可编辑删除功能. 注:本文数据库处理使用框架AHibernate,可以灵活操作sqlite数据库, 详见: http://blog.cs...
  • lk_blog
  • lk_blog
  • 2012年05月14日 00:10
  • 6237
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Android ExpandableListView分组效果
举报原因:
原因补充:

(最多只允许输入30个字)