Android中ExpandableListView的使用

ExpandableListView是android中可以实现下拉list的一个控件,具体的实现方法如下:

首先:在layout的xml文件中定义一个ExpandableListView

<LinearLayout 
    android:id="@+id/linearLayout"
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent"
    androidrientation="vertical"
>
    <ExpandableListView
        android:id="@+id/expandableListView"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
    />
</LinearLayout>

定义两个List,用来存放控件中Group/Child中的String

private List<String> groupArray;
private List<List<String>> childArray;

对这两个List进行初始化,并插入一些数据

groupArray = new ArrayList<String>();
childArray = new ArrayList<List<String>>();

groupArray.add("第一行");
groupArray.add("第二行");

List<String> tempArray = new ArrayList<String>();
tempArray.add("第一条");
tempArray.add("第二条");
tempArray.add("第三条");

for(int index = 0; index <groupArray.size(); ++index){
    childArray.add(tempArray);
}

定义ExpandableListView的Adapter

//ExpandableListView的Adapter
public class ExpandableAdapter extends BaseExpandableListAdapter
{
    Activity activity;
        
    public ExpandableAdapter(Activity a)
    {
        activity = a;
    }

    public Object getChild(int groupPosition, int childPosition)
    {
        return childArray.get(groupPosition).get(childPosition);
    }

    public long getChildId(int groupPosition, int childPosition)
    {
        return childPosition;
    }

    public int getChildrenCount(int groupPosition)
    {
        return childArray.get(groupPosition).size();
    }

    public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent)
    {
        String string = childArray.get(groupPosition).get(childPosition);
        return getGenericView(string);
    }

    // group method stub
    public Object getGroup(int groupPosition)
    {
        return groupArray.get(groupPosition);
    }

    public int getGroupCount()
    {
        return groupArray.size();
    }

    public long getGroupId(int groupPosition)
    {
        return groupPosition;
    }

    public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent)
    {
        String string = groupArray.get(groupPosition);
        return getGenericView(string);
    }

    // View stub to create Group/Children 's View
    public TextView getGenericView(String string)
    {
        // Layout parameters for the ExpandableListView
        AbsListView.LayoutParams layoutParams = new AbsListView.LayoutParams(ViewGroup.LayoutParams.FILL_PARENT, 64);
        TextView text = new TextView(activity);
        text.setLayoutParams(layoutParams);
        // Center the text vertically
        text.setGravity(Gravity.CENTER_VERTICAL | Gravity.LEFT);
        // Set the text starting position
        text.setPadding(36, 0, 0, 0);
        text.setText(string);
        return text;
    }

    public boolean hasStableIds()
    {
        return false;
    }

    public boolean isChildSelectable(int groupPosition, int childPosition)
    {
        return true;
    }
}

最后,给定义好的ExpandableListView添加上Adapter

ExpandableListView expandableListView = (ExpandableListView)findViewById(R.id.expandableListView);
expandableListView.setAdapter(new ExpandableAdapter(Main.this));

发表评论