`
antkingwei
  • 浏览: 41825 次
  • 性别: Icon_minigender_1
  • 来自: 日照
社区版块
存档分类
最新评论

Android QQ多级列表的实现

阅读更多



 主类:

package com.android.qu.antking.list;

import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseExpandableListAdapter;
import android.widget.ExpandableListView;
import android.widget.ImageView;
import android.widget.TextView;

import java.util.*;



public class MyMain extends Activity {
  //author antkingwei
	private List<Map<String,Object>> parentList=new ArrayList<Map<String,Object>>();
	
	private List<List<Map<String,Object>>> childList = new ArrayList<List<Map<String,Object>>>();
	
	ExpendAdapter adapter;
	
	ExpandableListView exList;
	
	private String[] listName = new String[]{
			"我的好友","高中同学","大学同学","移动开发","网站建设","普通朋友"
	};
	private String[] childTitle= new String[]{
		"丫宁","王八锐","小鸟","连超","董二丫"	
	};
	private String[] childMood= new String[]{
		"我喜欢王锐","我就是王八","我也喜欢王锐","上边一群傻帽","同楼上"	
	};
	private int[] headImage=new int[]{
		R.drawable.ning,R.drawable.rui,R.drawable.niao,R.drawable.lianchao,R.drawable.xiaoxiao	
	};
	
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        exList = (ExpandableListView) this.findViewById(R.id.expandableListView1);
        parentList =getParentList();
        childList = getChildList();
       adapter = new ExpendAdapter(MyMain.this, parentList, childList);
      
        exList.setAdapter(adapter);
        exList.setGroupIndicator(null);
        exList.setDivider(null);
        
    }
    public List<Map<String,Object>> getParentList(){
    	List<Map<String,Object>> list = new ArrayList<Map<String,Object>>();
    	for(int i=0;i<listName.length;i++){
    		 Map<String, Object> curGroupMap = new HashMap<String, Object>();
             list.add(curGroupMap);
             curGroupMap.put("List", listName[i]);
    	}
    	return list;
    }
    public List<List<Map<String,Object>>> getChildList(){
    	List<List<Map<String,Object>>> list1 = new ArrayList<List<Map<String,Object>>>();
    	 for (int i = 0; i < listName.length; i++) {
             
               
             List<Map<String, Object>> children = new ArrayList<Map<String, Object>>();
             for (int j = 0; j <childTitle.length; j++) {
                 Map<String, Object> curChildMap = new HashMap<String, Object>();
                 children.add(curChildMap);
                 curChildMap.put("Title", childTitle[j]);
                 curChildMap.put("Mood", childMood[j]);
                 curChildMap.put("Head", headImage[j]);
             }
             list1.add(children);
    	}
    	return list1;
    	
    }
   
}

 自定义的Adapter

package com.android.qu.antking.list;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseExpandableListAdapter;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;

import java.util.*;

public class ExpendAdapter extends BaseExpandableListAdapter {
      private LayoutInflater layoutInflater;
      
      private Context mContext;
      
      private List<Map<String,Object>> parentList = new ArrayList<Map<String,Object>>();
      
      private List<List<Map<String,Object>>> childList = new ArrayList<List<Map<String,Object>>>();
      
      
	public ExpendAdapter(Context mContext,List<Map<String,Object>> parentList,List<List<Map<String,Object>>> childList){
		
		
		this.mContext = mContext;
		
		this.parentList = parentList;
		
		this.childList = childList;
		
		layoutInflater = LayoutInflater.from(mContext);
	}
	public Object getChild(int groupPosition, int childPosition) {
		// TODO Auto-generated method stub
		return childList.get(groupPosition).get(childPosition).get("Title").toString();
	}

	@Override
	public long getChildId(int groupPosition, int childPosition) {
		return childPosition;
	}

	@Override
	public View getChildView(int groupPosition, int childPosition,
			boolean isLastChild, View convertView, ViewGroup parent) {
		
		if(convertView ==null){
			convertView = layoutInflater.inflate(R.layout.childlist, null);
			
		}
		final ImageView head=(ImageView)convertView.findViewById(R.id.headImage);
		   head.setImageResource(Integer.valueOf(childList.get(groupPosition).get(childPosition).get("Head").toString()));
		final TextView title=(TextView)convertView.findViewById(R.id.title);
		  title.setText(childList.get(groupPosition).get(childPosition).get("Title").toString());
		  
	    final TextView mood =(TextView)convertView.findViewById(R.id.mood);
	      mood.setText(childList.get(groupPosition).get(childPosition).get("Mood").toString());
		return convertView;
	}

	@Override
	public int getChildrenCount(int groupPosition) {
		// TODO Auto-generated method stub
		return childList.get(groupPosition).size();
	}

	@Override
	public Object getGroup(int groupPosition) {
		// TODO Auto-generated method stub
		return parentList.get(groupPosition).get("List").toString();
	}

	@Override
	public int getGroupCount() {
		// TODO Auto-generated method stub
		return parentList.size();
	}

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

	@Override
	public View getGroupView(int groupPosition, boolean isExpanded,
			View convertView, ViewGroup parent) {
		
		if(convertView==null){
			convertView=layoutInflater.inflate(R.layout.parentlist, null);
			
		}
		final TextView list = (TextView) convertView.findViewById(R.id.list);
		  list.setText(parentList.get(groupPosition).get("List").toString());
		return convertView;
	}

	@Override
	public boolean hasStableIds() {
		// TODO Auto-generated method stub
		Toast.makeText(mContext,"nihao",Toast.LENGTH_SHORT).show();
		return true;
	}

	@Override
	public boolean isChildSelectable(int groupPosition, int childPosition) {
		Toast.makeText(mContext, "这是第"+groupPosition+"组,第"+childPosition+"个", Toast.LENGTH_SHORT).show();
		return true;
	}

}
	

 主布局文件

<?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="fill_parent"
    android:background="@drawable/back1"
    >

<ExpandableListView android:layout_height="wrap_content" android:id="@+id/expandableListView1" android:layout_width="fill_parent"></ExpandableListView>
</LinearLayout>

 另一个布局文件

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="fill_parent"
  android:orientation="horizontal"
  android:id="@+id/parentList"
  android:layout_height="wrap_content">
  <ImageView 
    android:layout_width="60px"
    android:layout_height="60px"
    android:src="@drawable/user_group"
   />
   <TextView
    android:id="@+id/list"
    android:textSize="20px"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"/>
  
</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:id="@+id/childList"
  android:orientation="horizontal"
  >
  <ImageView
    android:paddingLeft="20px"
    android:id="@+id/headImage"
    android:src="@drawable/icon"
    android:layout_width="50px"
    android:layout_height="50px"
    android:layout_marginBottom="5px"
    android:layout_marginRight="10px"/>
  <LinearLayout
   android:orientation="vertical"
   android:layout_width="fill_parent"
   
   android:layout_height="wrap_content">
   <TextView android:id="@+id/title"
   android:textSize="18px"
   android:layout_width="wrap_content"
   android:layout_height="wrap_content"
   />
   <TextView android:id="@+id/mood"
   android:textSize="16px"
   android:layout_width="wrap_content"
   android:layout_height="wrap_content"/>
   
   </LinearLayout>
</LinearLayout>
 
  • 大小: 46.8 KB
分享到:
评论

相关推荐

    android QQ多级列表的实现

    详细介绍了关于android多级列表的显示,及详细代码的分析.....

    Android 仿QQ多级列表框实现

    本教程将详细讲解如何在Android平台上实现这样的功能,旨在帮助开发者构建具有类似QQ多级列表效果的应用。 首先,我们要理解多级列表框的基本概念。在Android中,多级列表通常指的是包含嵌套子项的ListView,这些...

    Android中RecyclerView实现多级折叠列表效果(二)

    要实现多级折叠列表,需要使用 TreeRecyclerAdapter,该适配器可以展开和折叠多级列表。首先,我们需要定义一个基类 BaseItem,该类将作为所有 item 的基类,然后我们可以通过继承该类来定义不同的 item 类型。 在 ...

    Android代码 QQ多级列表框

    综上所述,实现一个"Android代码 QQ多级列表框"涉及到了Android UI设计、数据结构、事件处理、性能优化等多个方面。开发者需要掌握并灵活运用这些技术,才能创建出高效且用户友好的多级列表应用。在实际项目中,可以...

    android仿qq多级列表

    总结起来,实现"android仿qq多级列表"主要涉及以下几个步骤: 1. 使用ExpandableListView替代ListView,提供展开和折叠功能。 2. 设计自定义布局XML文件,定义GroupView和ChildView样式。 3. 创建自定义适配器,...

    Android 仿QQ多级列表框源码

    本资源提供了"Android 仿QQ多级列表框源码",帮助开发者实现类似功能。下面将详细解析这个源码中的关键知识点。 1. **ExListView**: ExListView 是这个项目的核心组件,它是对Android原生ListView的扩展,旨在...

    安卓Android源码——仿QQ多级列表框源码.zip

    这份“安卓Android源码——仿QQ多级列表框源码.zip”压缩包提供了一种实现此类功能的方法。下面,我们将详细讨论相关知识点。 首先,源码中的核心组件很可能是自定义的ListView或者RecyclerView,因为这两种控件是...

    Android 仿QQ多级列表框源码.rar

    这个"Android 仿QQ多级列表框源码"就提供了一个实现这种功能的解决方案。 首先,我们需要理解多级列表的基本概念。多级列表通常指的是一个列表项可以展开显示更多的子项,这些子项也可以继续展开,形成一个多级嵌套...

    仿qq多级列表实现

    这个“仿qq多级列表实现”的项目显然旨在模拟QQ应用程序的好友展示方式,允许用户点击展开查看更详细的好友信息,并且结合了图像元素以提升用户体验。下面将详细探讨这一实现过程中的关键知识点。 首先,QQ的好友...

    Android 仿QQ多级列表框源码.zip

    这个“Android 仿QQ多级列表框源码”项目提供了这样的功能实现,旨在帮助开发者理解和学习如何在Android环境中创建一个可扩展、交互式的多级选择器。 首先,我们要了解的是,这个源码项目是基于Java编程语言编写的...

    Android代码-仿QQ多级列表框源码.zip

    在Android开发中,创建一个仿QQ多级列表框是一项常见的需求,这通常涉及到自定义控件、数据结构和用户交互的设计。在这个项目中,我们将会深入探讨如何实现这样一个功能丰富的组件。 首先,"仿QQ多级列表框"指的是...

    Android源码——仿QQ多级列表框源码.zip

    这个"Android源码——仿QQ多级列表框源码.zip"压缩包提供了一种实现此类功能的方法。接下来,我们将深入探讨相关知识点。 1. 多级列表(Nested ListView): 在Android中,为了实现多级列表,开发者通常会使用...

    Android程序研发源码Android 仿QQ多级列表框源码.rar

    这个"Android程序研发源码Android 仿QQ多级列表框源码.rar"压缩包提供了一个实现这一功能的源代码示例。下面将详细解析其关键知识点。 1. **ExListView组件**: - `ExListView`是这个源码中的核心组件,它是对...

    Android仿QQ多级列表框源码.zip

    本资源提供的"Android仿QQ多级列表框源码"是一个实用的示例,帮助开发者了解并掌握如何在Android应用中创建这种交互式的界面元素。 首先,我们要理解多级列表框的基本概念。它是一种可以展开和折叠的树形结构,每个...

    Android 仿QQ多级列表框源码.zip源码资源下载

    为了实现QQ多级列表的样式,开发者需要创建自定义的Adapter,继承自BaseAdapter或ExpandableListAdapter,重写其中的方法,如`getCount()`, `getItem()`, `getView()`等,以提供定制化的数据绑定和视图渲染。...

    仿QQ多级列表框实现

    "仿QQ多级列表框实现"是一个针对这一需求的具体技术实现,常用于构建类似QQ通讯录的好友组结构展示。这个功能允许用户以清晰、层次分明的方式查看和管理大量联系人,比如按照不同的群组或者分类进行组织。 多级列表...

Global site tag (gtag.js) - Google Analytics