【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才行。

树形菜单和下拉菜单.rar

  • 2011年11月10日 14:58
  • 10KB
  • 下载

【多级树形菜单-dialog自定义动画弹出方式-手势监听】android实现treeView

工作需要,这两天晚上弄的都是多级树形菜单。 d

android中的树形菜单

  • 2013年02月19日 14:17
  • 30KB
  • 下载

Android ExpandableListView双层嵌套实现三级树形菜单

Android ExpandableListView双层嵌套实现三级树形菜单

Android提高十七篇之多级树形菜单的实现

本文来自http://blog.csdn.net/hellogv/ ,引用必须注明出处!http://blog.csdn.net/hellogv/archive/2011/01/06/6120133....

Android提高十七篇之多级树形菜单的实现

本文来自http://blog.csdn.net/hellogv/ ,引用必须注明出处!        在Android里要实现树形菜单,都是用ExpandableList(也有高手自己继承Li...

Android提高十七篇之多级树形菜单的实现

Android提高十七篇之多级树形菜单的实现 在Android里要实现树形菜单,都是用ExpandableList(也有高手自己继承ListView或者LinearLayout来...

Android提高十七篇之多级树形菜单的实现

在Android上使用ExpandableList实现二级/三级树形菜单
  • hellogv
  • hellogv
  • 2011年01月06日 13:53
  • 68869

Android提高十七篇之多级树形菜单的实现 一

在Android里要实现树形菜单,都是用ExpandableList(也有高手自己继承ListView或者LinearLayout来做),但是ExpandableList一般只能实现2级树形菜单......
  • jolfe
  • jolfe
  • 2013年04月17日 17:08
  • 620

Android 树形菜单

  • 2016年03月31日 14:33
  • 1.65MB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:【Android】树形菜单、扩展下拉菜单BaseExpandableListAdapter、AbsListView
举报原因:
原因补充:

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