您的位置:首页 > 移动开发 > Android开发

Android组件学习之ExpandableListView

2014-08-10 19:25 288 查看
一个简单的小例子:



可以展开的ListView,和Listview差不多,只是设置的Adapter不同。常用的Adapter有BaseExpandableListAdapter、SimpleExpandableListAdapter、SimpleCursorTreeAdapter

布局如下:(布局中我设置了android:groupIndicator,不知道为什么不起作用。另外,android:dividerHeight这个属性是组对象和子节点共用的。如果要定义比较复杂的组视图及子节点视图,还是单独设置一个layout文件,再在Adapter中设置相应的返回View视图)

<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="com.example.testandroid.ui.MainActivity" >

<ExpandableListView
android:id="@+id/main_elv1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:childDivider="@color/white"
android:divider="@color/gray"
android:dividerHeight="1px"
android:groupIndicator="@drawable/arrow_triangle_down"
android:indicatorLeft="4dp"
android:indicatorRight="4dp" >
</ExpandableListView>

</RelativeLayout>


主Activity如下:

package com.example.testandroid.ui;

import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.ExpandableListView;

import com.example.testandroid.R;
import com.example.testandroid.adapter.MainActivityExLVAdapter;

public class MainActivity extends ActionBarActivity {

private ExpandableListView mExpandableListView = null;
private MainActivityExLVAdapter mMainActivityExLVAdapter = null;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
init();
}

private void init() {
mExpandableListView = (ExpandableListView) findViewById(R.id.main_elv1);
mMainActivityExLVAdapter = new MainActivityExLVAdapter(this);
mExpandableListView.setAdapter(mMainActivityExLVAdapter);
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
}


Adapter我写到另外一个类文件中:

package com.example.testandroid.adapter;

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

public class MainActivityExLVAdapter extends BaseExpandableListAdapter {

private Context mContext = null;

private String[] mGroup = { "FirstOne", "SecondTwo", "ThirdThress" };
private String[][] mChildren = {
{ "2014-year-01-month-01", "2014-year-01-month-02",
"2014-year-01-month-03", "2014-year-01-month-04",
"2014-year-01-month-05" },
{ "2014-year-02-month-01", "2014-year-02-month-02",
"2014-year-02-month-03", "2014-year-02-month-04" },
{ "2014-year-03-month-01", "2014-year-03-month-02", } };

public MainActivityExLVAdapter(Context mContext) {
this.mContext = mContext;
}

/**
* 获取组的数量
*/
@Override
public int getGroupCount() {
return mGroup.length;
}

/**
* 获取组下的节点数量
*/
@Override
public int getChildrenCount(int groupPosition) {
return mChildren[groupPosition].length;
}

/**
* 获取组对象(这个方法可以返回任意对象,或者null都行,给自己调用的)
*/
@Override
public Object getGroup(int groupPosition) {
return mGroup[groupPosition];
}

/**
* 获取子节点对象(这个方法可以返回任意对象,或者null都行,给自己调用的)
*/
@Override
public Object getChild(int groupPosition, int childPosition) {
return mChildren[groupPosition][childPosition];
}

/**
* 给自己调用的
*/
@Override
public long getGroupId(int groupPosition) {
return groupPosition;
}

/**
* 给自己调用的
*/
@Override
public long getChildId(int groupPosition, int childPosition) {
return childPosition;
}

/**
* TODO 不知道有什么用
*/
@Override
public boolean hasStableIds() {
return true;
}

/**
* 返回组对象的视图
*/
@Override
public View getGroupView(int groupPosition, boolean isExpanded,
View convertView, ViewGroup parent) {
TextView mTextView = new TextView(mContext);
mTextView.setText(getGroup(groupPosition).toString());
return mTextView;
}

/**
* 返回子节点的视图
*/
@Override
public View getChildView(int groupPosition, int childPosition,
boolean isLastChild, View convertView, ViewGroup parent) {
TextView mTextView = new TextView(mContext);
mTextView.setText(getChild(groupPosition, childPosition).toString());
return mTextView;
}

@Override
public boolean isChildSelectable(int groupPosition, int childPosition) {
return false;
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: