【Android】树形菜单、扩展下拉菜单BaseExpandableListAdapter、AbsListView

转载 2012年03月28日 09:08:11

先看效果~

也就是BaseExpandableListAdapter、AbsListView类的使用,就不多说了..大牛留情...

就两个类。

package com.yfz;
import java.util.ArrayList;
import java.util.List;
import android.app.Activity;
import android.os.Bundle;
import android.view.ViewGroup.LayoutParams;
import android.widget.ExpandableListView;
import android.widget.ViewFlipper;
public class ExpandLabel extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        // 数据源
        //标题
        List<String> groupArray = new ArrayList<String>();
        //子标题
        List<List<String>> childArray = new ArrayList<List<String>>();
		groupArray.add("第一章");
		groupArray.add("第二章");
		List<String> tempArray01 = new ArrayList<String>();
		tempArray01.add("第1.1节");
		tempArray01.add("第1.2节");
		tempArray01.add("第1.3节");
		
		List<String> tempArray02 = new ArrayList<String>();
		tempArray02.add("第2.1节");
		tempArray02.add("第2.2节");
		tempArray02.add("第2.3节");
		
		childArray.add(tempArray01);
		childArray.add(tempArray02);
		
        ExpandableListView expandableListView = new ExpandableListView(this);
        
        ExpandableAdapter adapter = new ExpandableAdapter(this,groupArray,childArray);
        
		expandableListView.setAdapter(adapter);
		
		addContentView(expandableListView, new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT));
    }
}


 

树形菜单类,只要传两个List过来就可以直接使用了。

groupArray:表示一级菜单

childArray: 表示二级菜单

二级菜单相当于一个二维List,该List中存储的每个元素都是一个List。第一个元素对应一级菜单中第一个菜单的子项List,第二个元素对应一级菜单中第二个菜单的子项List,依次类推。

ExpandableAdapter:

package com.yfz;
import java.util.ArrayList;
import java.util.List;
import android.app.Activity;
import android.view.Gravity;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AbsListView;
import android.widget.BaseExpandableListAdapter;
import android.widget.TextView;
public class ExpandableAdapter extends BaseExpandableListAdapter {
		
	private List<String> groupArray;
	private List<List<String>> childArray;
	private Activity activity;
	public ExpandableAdapter(Activity a,List<String> groupArray,List<List<String>> childArray) {
		activity = a;
		this.groupArray = groupArray;
		this.childArray = childArray;
	}
	
	@Override
	public Object getChild(int groupPosition, int childPosition) {
		// TODO Auto-generated method stub
		return childArray.get(groupPosition).get(childPosition);
	}
	@Override
	public long getChildId(int groupPosition, int childPosition) {
		// TODO Auto-generated method stub
		return childPosition;
	}
	@Override
	public View getChildView(int groupPosition, int childPosition,
			boolean isLastChild, View convertView, ViewGroup parent) {
		// TODO Auto-generated method stub
		String string = childArray.get(groupPosition).get(childPosition);
		return getGenericView(string);
	}
	@Override
	public int getChildrenCount(int groupPosition) {
		// TODO Auto-generated method stub
		return childArray.get(groupPosition).size();
	}
	@Override
	public Object getGroup(int groupPosition) {
		// TODO Auto-generated method stub
		return groupArray.get(groupPosition);
	}
	@Override
	public int getGroupCount() {
		// TODO Auto-generated method stub
		return groupArray.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) {
		// TODO Auto-generated method stub
		String string = groupArray.get(groupPosition);
		return getGenericView(string);
	}
	@Override
	public boolean hasStableIds() {
		// TODO Auto-generated method stub
		return false;
	}
	@Override
	public boolean isChildSelectable(int groupPosition, int childPosition) {
		// TODO Auto-generated method stub
		return false;
	}
	
/****************************************以下为自定义方法*********************************************/	
	/**
	 * Children 's View
	 * @param string
	 * @return
	 */
	public TextView getGenericView(String string) {
		AbsListView.LayoutParams layoutParams = new AbsListView.LayoutParams(ViewGroup.LayoutParams.FILL_PARENT, 64);
		TextView text = new TextView(activity);
		text.setLayoutParams(layoutParams);
		// Center the text vertically
		text.setGravity(Gravity.CENTER_VERTICAL | Gravity.LEFT);
		// Set the text starting position
		text.setPadding(36, 0, 0, 0);
		text.setText(string);
		return text;
	}
}


 

ExpandableListView的OnChildClickListener无效? ExpandableListView子元素无法点击?

不知道大家有没有发现,上面这样做之后, Child项时无法被点击的。 因此也会造成OnChildClickListener注册后无效。 即不管你怎么点击Child项,onChildClick始终不会被调用, 原因是什么呢?

很简单,是自定义adapter中的 isChildSelectable 方法造成。 这个方法标识子元素能否被点击。 返回false就无法被点击,要返回true才行。

【Android】树形菜单、扩展下拉菜单BaseExpandableListAdapter、AbsListView

先看效果~也就是BaseExpandableListAdapter类的使用,就不多说了..大牛留情...就两个类。ExpandLabel:package com.yfz; import java...
  • feng88724
  • feng88724
  • 2011年01月30日 16:37
  • 10961

ExpandableListView扩展(BaseExpandableListAdapter的使用)

针对普通的ExpandableListView的使用,即,需要显示的数据全都是使用TextView显示时,我们使用SimpleExpandableListAdapter就可以了。 但是如果是相对复杂...
  • BenW1988
  • BenW1988
  • 2011年10月13日 20:05
  • 20481

Android成长之路-BaseExpandableListAdapter的用法

BaseExpandableListAdapter是ExpandableListAdapter的抽象基类,从一些数据中提供数据和视图给可折叠列表视图。 例子详解: 首先定义一个xml布局文件: ...
  • like7xiaoben
  • like7xiaoben
  • 2012年01月19日 21:35
  • 23050

Android开发:BaseExpandableListAdapter的使用

项目需要展示一个通讯簿,通讯簿中的手机号码是分组的,要求勾选组时,自动勾选组下的手机号码,实现效果如下:...
  • kmyhy
  • kmyhy
  • 2010年11月26日 13:49
  • 15038

android BaseExpandableListAdapter 二级菜单适配器

android BaseExpandableListAdapter 二级菜单适配器
  • menglele1314
  • menglele1314
  • 2016年03月07日 15:50
  • 829

Android 中文 API —— AbsListView详述

AbsListView 译者署名: cnmahj 译者链接: http://android.toolib.net/blog/ 版本:Android 2.3 r1   结构 继承关系 ...
  • mrleeapple
  • mrleeapple
  • 2015年11月25日 16:21
  • 794

android 三级菜单 BaseExpandableListAdapter

在网上搜了很长时间,没有找到合适的Android三级菜单,所以就自己动手写了一个,主要使用了BaseExpandableList来实现,通过三个布局文件来完成对应的菜单项,具体实现请参照下图。 ...
  • kai46385076
  • kai46385076
  • 2015年06月30日 16:19
  • 867

Android学习之抽象类AbsListView

一、继承关系         public abstract class AbsLis
  • fwy19930618
  • fwy19930618
  • 2014年04月09日 11:59
  • 1940

详细讲解Android中的AbsListView的源码

不知道各位童鞋们在开发的过程中有没有感兴趣过ListView是如何实现的呢?其实本身ListView的父类AbsListView才是关键,但是如果大家看过源码的话,会发现AbsListView将近70...
  • zhangjiaofa
  • zhangjiaofa
  • 2014年12月29日 22:57
  • 989

Android AbsListView坐标体系解析

 Android AbsListView坐标体系解析 Android的AbsListView与Android ListView不同,AbsListView代表了一个抽象的列表View。在实际的...
  • zhangphil
  • zhangphil
  • 2015年12月19日 22:20
  • 1837
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:【Android】树形菜单、扩展下拉菜单BaseExpandableListAdapter、AbsListView
举报原因:
原因补充:

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