标签:android控件开发 可扩展列表 expandablelistview
android控件开发之ExpandableListActivity
本博文主要讲述的是android控件开发中的ExpandableListActivity(可扩展List)控件的简单用法。
java代码:
package com.example.expandablelistactivity;
import java.util.ArrayList;
import java.util.HashMap;
import android.os.Bundle;
import android.app.ListActivity;
import android.view.Menu;
import android.view.View;
import android.widget.ExpandableListView;
import android.widget.SimpleExpandableListAdapter;
import android.widget.ExpandableListView.OnChildClickListener;
/*创建一个ExpandableListActivity需要如下步骤:
* 1、首先需要设置ExpandableListView的布局样式
* 2、创建一个一级条目的布局样式文件
* 3、创建一个二级条目的布局样式文件
* 4、设置一级条目的数据
* 5、设置二级条目的数据
* 6、使用SimpleExpandableListAdapter为ExpandableListActivity提供数据
* 7、设置监听器
* */
public class MainActivity extends ListActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
//创建一级条目的对象
ArrayList<HashMap<String, String>> groups = new ArrayList<HashMap<String,String>>();
HashMap<String, String> group1 = new HashMap<String, String>();
HashMap<String, String> group2 = new HashMap<String, String>();
//给一级条目设置数据
group1.put("group", "group1");
group2.put("group", "group2");
//将数据添加到一级条目的对象中
groups.add(group1);
groups.add(group2);
//创建二级条目的child1对象。用来给第一个一级条目提供数据
ArrayList<HashMap<String, String>> child1 = new ArrayList<HashMap<String,String>>();
HashMap<String, String> child1data1 = new HashMap<String, String>();
HashMap<String, String> child1data2 = new HashMap<String, String>();
HashMap<String, String> child1data3 = new HashMap<String, String>();
child1data1.put("child", "child1data1");
child1data2.put("child", "child1data2");
child1data3.put("child", "child1data3");
child1.add(child1data1);
child1.add(child1data2);
child1.add(child1data3);
//创建二级条目的child2对象。用来给第二个一级条目提供数据
ArrayList<HashMap<String, String>> child2 = new ArrayList<HashMap<String,String>>();
HashMap<String, String> child2data1 = new HashMap<String, String>();
child2data1.put("child", "child2data1");
child2.add(child2data1);
//创建二级条目的对象。
ArrayList<ArrayList<HashMap<String, String>>> childs = new ArrayList<ArrayList<HashMap<String,String>>>();
childs.add(child1);
childs.add(child2);
SimpleExpandableListAdapter ela = new SimpleExpandableListAdapter(this, groups,
R.layout.group, new String[]{"group"}, new int[]{R.id.groupText},
childs, R.layout.child, new String[]{"child"}, new int[]{R.id.childText});
//给ExpandableListView设置SimpleExpandableListAdapter适配器
ExpandableListView expandableListView = (ExpandableListView)findViewById(android.R.id.list);
expandableListView.setAdapter(ela);
//绑定ExpandableListView child的监听器
expandableListView.setOnChildClickListener(new expandableChildLisenter());
}
//实现二级菜单监听器
class expandableChildLisenter implements OnChildClickListener{
@Override
public boolean onChildClick(ExpandableListView parent, View v,
int groupPosition, int childPosition, long id) {
// TODO Auto-generated method stub
System.out.println("group = " + groupPosition);
System.out.println("child = " + childPosition);
System.out.println("id = " + id);
return false;
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}
主布局文件main.xml代码:此布局文件主要是定义一个ExpandableListView
<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"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" >
<TextView
android:id="@+id/myText"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/hello_world" />
<!--设置ExpandableListView主界面的布局文件 -->
<ExpandableListView
android:id="@id/android:list"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:padding="5dp"
android:layout_below="@id/myText"
></ExpandableListView>
</RelativeLayout>
一级列表布局文件group.xml代码:此布局文件主要设置的是一级列表的样式
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<!--主要是设置一级条目的样式 -->
<TextView
android:id="@+id/groupText"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:paddingLeft="30dp"
android:paddingTop="5dp"
android:paddingBottom="5dp"
android:textSize="20sp"/>
</LinearLayout>
效果如下:
二级列表布局文件child.xml代码:此布局文件主要是用来设置二级列表的样式
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<!--设置二级条目的样式 -->
<TextView
android:id="@+id/childText"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:paddingLeft="35dp"
android:textSize="15sp"/>
</LinearLayout>
效果如下:
当点击二级列表中的某项时,会在LogCat中输出当前点击的菜单的一级列表POS,二级列表POS,以及二级列表的ID,如下:
android控件开发之ExpandableListActivity
标签:android控件开发 可扩展列表 expandablelistview
原文地址:http://blog.csdn.net/ajhsdj/article/details/41862807