android BaseExpandableListAdapter 2級メニューアダプタ


android BaseExpandableListAdapter 2級メニューアダプタ
activity_main.xml
<RelativeLayout 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" >

    <ExpandableListView
        android:id="@+id/home_a_list"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_below="@id/ll_title"
        android:childDivider="#EEEEEE"
        android:divider="#c8c7cc"
        android:dividerHeight="1dp"
        android:gravity="center"
        android:groupIndicator="@null"
        android:listSelector="#00000000" />

</RelativeLayout>

MainActivity
.java
package com.zcycjy.mobile.fragment;

import java.util.ArrayList;
import java.util.List;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.ExpandableListView;
import android.widget.ExpandableListView.OnChildClickListener;
import android.widget.ExpandableListView.OnGroupExpandListener;

import com.zcycjy.mobile.R;
import com.zcycjy.mobile.adapter.ExpandableAdapter;
import com.zcycjy.mobile.entity.HomeType;

/**
 * @author itps
 * 
 */
public class MainActivity extends Activity {

	//   
	private List<String> groupArray = new ArrayList<String>();
	//    
	private List<List<HomeType>> childArray = new ArrayList<List<HomeType>>();
	private ExpandableAdapter adapters;
	private ExpandableListView expandableListView;

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		getDatas(0);
		
		initView();
	}

	private void initView() {
		expandableListView = (ExpandableListView)findViewById(R.id.home_a_list);
		adapters = new ExpandableAdapter(this, groupArray, childArray);
		expandableListView.setAdapter(adapters);

		expandableListView.setOnChildClickListener(new OnChildClickListener() {

			@Override
			public boolean onChildClick(ExpandableListView parent, View v,
					int groupPosition, int childPosition, long id) {
				// TODO Auto-generated method stub
				HomeType ht = (HomeType) adapters.getChild(groupPosition,
						childPosition);
				return false;
			}
		});
		expandableListView
				.setOnGroupExpandListener(new OnGroupExpandListener() {

					@Override
					public void onGroupExpand(int groupPosition) {
						for (int i = 0; i < groupArray.size(); i++) {
							if (groupPosition != i) {
								expandableListView.collapseGroup(i);
							}
						}
					}
				});
	}

	private void getDatas(int type) {
		//   
		groupArray.add("     ");
		List<HomeType> ta1 = new ArrayList<HomeType>();
		ta1.add(new HomeType("  ", "000001"));
		ta1.add(new HomeType("  ", "000002"));
		ta1.add(new HomeType("      ", "000003"));
		ta1.add(new HomeType("  ", "000004"));
		ta1.add(new HomeType("   ", "000005"));
		ta1.add(new HomeType("         ", "000006"));
		groupArray.add("      ");
		List<HomeType> ta2 = new ArrayList<HomeType>();
		ta2.add(new HomeType("      ", "000011"));
		groupArray.add("      ");
		List<HomeType> ta3 = new ArrayList<HomeType>();
		ta3.add(new HomeType("      ", "000021"));
		ta3.add(new HomeType("     ", "000022"));
		ta3.add(new HomeType("      ", "000023"));

		childArray.add(ta1);
		childArray.add(ta2);
		childArray.add(ta3);
	}

}

ExpandableAdapter
.java
package com.zcycjy.mobile.adapter;

import java.util.List;

import com.zcycjy.mobile.entity.HomeType;

import android.app.Activity;
import android.graphics.Color;
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<HomeType>> childArray;
	private Activity activity;

	public ExpandableAdapter(Activity act, List<String> groupArray,
			List<List<HomeType>> childArray) {
		this.activity = act;
		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)
				.getTypeName();
		return getGenericView(string, 1);
	}

	@Override
	public int getChildrenCount(int groupPosition) {
		// TODO Auto-generated method stub
		return childArray == null ? 0 : 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 == null ? 0 : 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, 0);
	}

	@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 true;
	}

	/**
	 * Children 's View
	 * 
	 * @param string
	 * @return
	 */
	public TextView getGenericView(String string, int i) {
		AbsListView.LayoutParams layoutParams = new AbsListView.LayoutParams(
				ViewGroup.LayoutParams.MATCH_PARENT,
				ViewGroup.LayoutParams.WRAP_CONTENT);
		TextView text = new TextView(activity);
		text.setLayoutParams(layoutParams);
		// Center the text vertically
		text.setGravity(Gravity.CENTER_VERTICAL | Gravity.LEFT);
		// Set the text starting position
		if (i == 1) {
			text.setTextColor(Color.parseColor("#000000"));
			text.setPadding(70, 10, 0, 10);
			text.setText(string + " >>>");
		} else {
			text.setTextColor(Color.parseColor("#F39801"));
			text.setPadding(40, 20, 0, 20);
			text.setText(string + " ▼▼▼");
		}
		return text;
	}
}