ExpandableListView的使用
2016-01-25 12:01
197 查看
1.定义父视图layout_parent.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="match_parent" android:layout_height="match_parent">
<TextView
android:id="@+id/parent_textview"
android:layout_width="match_parent"
android:layout_height="50dp"
android:layout_gravity="center"
android:gravity="center" />
</LinearLayout>
2.定义子视图layout_children.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/second_textview"
android:layout_width="match_parent"
android:layout_height="40dp"
android:layout_gravity="center"
android:gravity="center" />
</LinearLayout>3.定义继承BaseExpandableListAdapter的ViewAdapter,并实现相应的方法
package com.gst.user.application;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.BaseExpandableListAdapter;
import android.widget.TextView;
import java.util.List;
import java.util.Map;
/**
* Created by user on 1/20/16.
*/
public class ViewAdapter extends BaseExpandableListAdapter {
private Context mContext;
private List<String> mParent;
private Map<String,List<String>> mData;
private LayoutInflater mLayoutInflater;
public ViewAdapter(Context mContext, List<String> mParent, Map<String, List<String>> mData) {
this.mContext = mContext;
this.mParent = mParent;
this.mData = mData;
mLayoutInflater=(LayoutInflater)mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
@Override
public int getGroupCount() {
return mParent.size();
}
@Override
public int getChildrenCount(int groupPosition) {
return mData.get(mParent.get(groupPosition)).size();
}
@Override
public Object getGroup(int groupPosition) {
return mParent.get(groupPosition);
}
@Override
public Object getChild(int groupPosition, int childPosition) {
return mData.get(mParent.get(groupPosition)).get(childPosition);
}
@Override
public long getGroupId(int groupPosition) {
return groupPosition;
}
@Override
public long getChildId(int groupPosition, int childPosition) {
return childPosition;
}
@Override
public boolean hasStableIds() {
return true;
}
//设置父item组件
@Override
public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) {
if (convertView == null) {
convertView=mLayoutInflater.inflate(R.layout.layout_parent,null);
}
TextView textView= (TextView) convertView.findViewById(R.id.parent_textview);
textView.setText(mParent.get(groupPosition));
return convertView;
}
//设置子item的组件
@Override
public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) {
if (convertView == null) {
convertView=mLayoutInflater.inflate(R.layout.layout_children,null);
}
TextView textView= (TextView) convertView.findViewById(R.id.second_textview);
textView.setText(mData.get(mParent.get(groupPosition)).get(childPosition));
return convertView;
}
@Override
public boolean isChildSelectable(int groupPosition, int childPosition) {
return false;
}
}
4.在主工程中添加数据,实例化ViewAdapter,绑定ExpandableListView
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="match_parent" android:layout_height="match_parent">
<TextView
android:id="@+id/parent_textview"
android:layout_width="match_parent"
android:layout_height="50dp"
android:layout_gravity="center"
android:gravity="center" />
</LinearLayout>
2.定义子视图layout_children.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/second_textview"
android:layout_width="match_parent"
android:layout_height="40dp"
android:layout_gravity="center"
android:gravity="center" />
</LinearLayout>3.定义继承BaseExpandableListAdapter的ViewAdapter,并实现相应的方法
package com.gst.user.application;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.BaseExpandableListAdapter;
import android.widget.TextView;
import java.util.List;
import java.util.Map;
/**
* Created by user on 1/20/16.
*/
public class ViewAdapter extends BaseExpandableListAdapter {
private Context mContext;
private List<String> mParent;
private Map<String,List<String>> mData;
private LayoutInflater mLayoutInflater;
public ViewAdapter(Context mContext, List<String> mParent, Map<String, List<String>> mData) {
this.mContext = mContext;
this.mParent = mParent;
this.mData = mData;
mLayoutInflater=(LayoutInflater)mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
@Override
public int getGroupCount() {
return mParent.size();
}
@Override
public int getChildrenCount(int groupPosition) {
return mData.get(mParent.get(groupPosition)).size();
}
@Override
public Object getGroup(int groupPosition) {
return mParent.get(groupPosition);
}
@Override
public Object getChild(int groupPosition, int childPosition) {
return mData.get(mParent.get(groupPosition)).get(childPosition);
}
@Override
public long getGroupId(int groupPosition) {
return groupPosition;
}
@Override
public long getChildId(int groupPosition, int childPosition) {
return childPosition;
}
@Override
public boolean hasStableIds() {
return true;
}
//设置父item组件
@Override
public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) {
if (convertView == null) {
convertView=mLayoutInflater.inflate(R.layout.layout_parent,null);
}
TextView textView= (TextView) convertView.findViewById(R.id.parent_textview);
textView.setText(mParent.get(groupPosition));
return convertView;
}
//设置子item的组件
@Override
public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) {
if (convertView == null) {
convertView=mLayoutInflater.inflate(R.layout.layout_children,null);
}
TextView textView= (TextView) convertView.findViewById(R.id.second_textview);
textView.setText(mData.get(mParent.get(groupPosition)).get(childPosition));
return convertView;
}
@Override
public boolean isChildSelectable(int groupPosition, int childPosition) {
return false;
}
}
4.在主工程中添加数据,实例化ViewAdapter,绑定ExpandableListView
package com.gst.user.application; import android.os.Bundle; import android.support.design.widget.FloatingActionButton; import android.support.design.widget.Snackbar; import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.Toolbar; import android.view.View; import android.widget.ExpandableListView; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; public class ExpandableListViewActivity extends AppCompatActivity { ExpandableListView expandableListView; Map<String,List<String>> mData; List parent; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_expandable_list_view); Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); setSupportActionBar(toolbar); FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab); fab.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG) .setAction("Action", null).show(); } }); initData(); expandableListView=(ExpandableListView)findViewById(R.id.expandableListView); ViewAdapter adapter=new ViewAdapter(this,parent,mData); expandableListView.setAdapter(adapter); } // 初始化数据 public void initData() { parent = new ArrayList<String>(); parent.add("parent1"); parent.add("parent2"); parent.add("parent3"); mData = new HashMap<String, List<String>>(); List<String> list1 = new ArrayList<String>(); list1.add("child1-1"); list1.add("child1-2"); list1.add("child1-3"); mData.put("parent1", list1); List<String> list2 = new ArrayList<String>(); list2.add("child2-1"); list2.add("child2-2"); list2.add("child2-3"); mData.put("parent2", list2); List<String> list3 = new ArrayList<String>(); list3.add("child3-1"); list3.add("child3-2"); list3.add("child3-3"); mData.put("parent3", list3); } }
相关文章推荐
- 80x86汇编语言编程:查找字符串中的最大、最小值
- 51单片机,汇编语言,定时与计数
- C++ —— 数据结构之 顺序栈,链式栈?
- 80x86汇编语言编程:三个数字进行比较
- 8255 的三总线连接方法
- 缓存技术PK:选择Memcached还是Redis?
- C编程中阻止程序退出的方法
- Keepalived 安装与配置
- iOS UICollectionView之三(基本用法)
- 每分钟改变一次方向的流水灯
- 8255 的直接连接方法
- 复位电路
- PROTEUS 仿真中的总线
- 用 LCD1602 显示的秒表
- 键盘编码芯片 MM74C922
- 拨盘开关输入方法
- 单片机 AT89C51 汇编语言编写报警信号程序
- 类模板编译时遇到的问题
- 北美崔哥博文: 外国移民说--“世界末日”就是中国人来了!
- 80x86汇编语言编程:在屏幕上显示彩色 ASCII 码