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自定义ViewGroup(二)——带悬停标题的ExpandableListView

项目里要加一个点击可收缩展开的列表,要求带悬停标题,具体效果如下图: 也就是说,在某一个分组内部滚动时,要求分组标题悬停,当滚出该分组范围时,把标题顶出去,悬停下一个分组的标题。正好看到一个比较有...
  • TurkeyCock
  • TurkeyCock
  • 2016年12月06日 01:04
  • 3734

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

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

详细讲解ExpandableListView显示和查询仿QQ分组列表用户信息

在我们的项目开发过程中,经常会对用户的信息进行分组,即通过组来显示用户的信息,同时通过一定的查询条件来显示查询后的相关用户信息,并且通过颜色选择器来设置列表信息的背景颜色,实现仿QQ分组列表显示以及查...
  • a123demi
  • a123demi
  • 2014年07月11日 23:09
  • 4609

ExpandableListView的拖动重新分组-DropDrag

工作N年了,从来没写过什么博客,这是本人在CSDN中的处女作,从Java转到Android,的确有好多东西需要学习,而且还是自学。好,废话不多说,直接上代码 此功能是直接从项目中拷贝过来的,稍微做了一...
  • quan356270259
  • quan356270259
  • 2015年09月22日 22:28
  • 1033

Android 仿QQ好友列表分组悬浮PinnedHeaderExpandableListView

转载自:http://blog.csdn.net/h7870181/article/details/40400155 楼主是在平板...
  • kami_zeros
  • kami_zeros
  • 2017年04月12日 13:23
  • 760

ExpandableListView组件分组用法

ExpandableListView组件分组用法                    ExpandableListView组件是android中一个比较常用的组件,当点击一个父item的时候可以将...
  • u013128651
  • u013128651
  • 2016年03月08日 22:56
  • 500

使用ExpandableListView+GridView实现分组数据展示

最近想实现一个带有标题的gridview分组,好多要用GridView添加HeaderView来实现,本人才开始学习这个,感觉有部分理解困难,所以想用的简单点,网上又找了好多例子,发现可以用Expan...
  • erqiing
  • erqiing
  • 2015年08月27日 10:25
  • 1435

使用ExpandableListView和ExpandableListAdapter实现分组列表

ExpandableListView直接继承自ListView,而ExpandableListAdapter则
  • zhangzeyuaaa
  • zhangzeyuaaa
  • 2014年10月18日 19:52
  • 1766

android ExpandableListView的group是一个自定义的布局,折叠图标覆盖布局上的部分内容

是用ExpandableListView时,当group是一个布局,而非Textview时,会遇到覆盖的问题,如图。 网上都没有相关的介绍,我自己的解决的办法是  在子布局的root处加入andro...
  • banana1006034246
  • banana1006034246
  • 2015年06月04日 17:28
  • 560

高级控件之分组列表视图(ExpandableListView)

和ListView不同的是它是一个两级的滚动列表视图,每一个组可以展开,显示一些子项,类似于 QQ列表,这些项目来至于ExpandableListAdapter的子类,也就是说,要实现向里面添加项目,...
  • wenzhi20102321
  • wenzhi20102321
  • 2016年12月06日 21:00
  • 751
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Android ExpandableListView分组效果
举报原因:
原因补充:

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