ExpandavleListView是一个简单实现二级列表的控件,和其他ListView相同,ExpandavleListView也有一个adapter适配器Expandavleadapger。
定义布局文件
<ExpandableListView android:id="@+id/Expandable" android:layout_width="match_parent" android:layout_height="match_parent"></ExpandableListView>
设置ExpandavleListView的子控件 因为是二级列表所以有两个子控件,分别是分组的子控件与子选择的控件
1.分组子视图
<TextView android:id="@+id/group_item" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_gravity="center_vertical" android:paddingLeft="40dp" />
2.子选择视图
<TextView android:id="@+id/item" android:layout_width="match_parent" android:layout_height="wrap_content" />
设置二级列表中的数据 ,我没有用借口所以用假数据代替
public String[] groupitem_name={"水果","蔬菜"}; public String[][] chilitem_name={
{"香蕉","苹果"}, {"土豆","番茄"}};
使用ExpandableListViewadapter,要继承BaseExpandableListAdapter
package com.example.administrator.expandavlelistveiw; import android.content.Context; import android.support.constraint.Group; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseExpandableListAdapter; import android.widget.TextView; /** * Created by Administrator on 2018/5/7. */ public class MyExpandableAdapter extends BaseExpandableListAdapter { public String[] groupitem_name={"水果","蔬菜"}; public String[][] chilitem_name={ {"香蕉","苹果"}, {"土豆","番茄"}}; Context context; public MyExpandableAdapter(Context context) { this.context = context; } // 获取分组的个数 @Override public int getGroupCount() { return groupitem_name.length; } // 获取指定分组中的子选项的个数 @Override public int getChildrenCount(int i) { return chilitem_name.length; } // 获取指定的分组数据 @Override public Object getGroup(int i) { return groupitem_name[i]; } // 获取指定分组中的指定子选项数据 @Override public Object getChild(int i, int i1) { return chilitem_name[i][i1]; } // 获取指定分组的ID, 这个ID必须是唯一的 @Override public long getGroupId(int i) { return i; } // 获取子选项的ID, 这个ID必须是唯一的 @Override public long getChildId(int i, int i1) { return i1; } // 分组和子选项是否持有稳定的ID, 就是说底层数据的改变会不会影响到它们。 @Override public boolean hasStableIds() { return true; } // 获取显示指定分组的视图 @Override public View getGroupView(int i, boolean b, View view, ViewGroup viewGroup) { Groupitem groupitem; if (view==null){ view= LayoutInflater.from(context).inflate(R.layout.expandableitem_01,viewGroup,false); groupitem=new Groupitem(); groupitem.textView=(TextView)view.findViewById(R.id.group_item); view.setTag(groupitem); }else { groupitem=(Groupitem) view.getTag(); } groupitem.textView.setText(groupitem_name[i]); return view; } @Override public View getChildView(int i, int i1, boolean b, View view, ViewGroup viewGroup) { chilItem chilItem; if (view==null){ view= LayoutInflater.from(context).inflate(R.layout.expandableitem_02,viewGroup,false); chilItem=new chilItem(); chilItem.textView=(TextView)view.findViewById(R.id.chil_item); view.setTag(chilItem); }else { chilItem=(chilItem)view.getTag(); } chilItem.textView.setText(chilitem_name[i][i1]); return view; } // 指定位置上的子元素是否可选中 @Override public boolean isChildSelectable(int i, int i1) { return true; } class Groupitem{ TextView textView; } class chilItem{ TextView textView; } }
MainActivity文件
package com.example.administrator.expandavlelistveiw; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.widget.ExpandableListView; public class MainActivity extends AppCompatActivity { private ExpandableListView expandable; private MyExpandableAdapter myExpandableAdapter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initView(); expandable.setAdapter(myExpandableAdapter); } //初始化ExpandableListView控件与Adapter private void initView() { expandable = (ExpandableListView) findViewById(R.id.Expandable); myExpandableAdapter =new MyExpandableAdapter(this); } }
效果图