Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

ExpandableListView definition in xml

Tags:

android

I need to define the structure of ExpandableListView in xml file manually. Is there any guide or example of doing this?

Thanks

like image 208
Alexander Oleynikov Avatar asked Jun 24 '10 13:06

Alexander Oleynikov


1 Answers

I run into this two days ago. Here's my solution:

First extend ExpandableListActivity and override the onCreate() method like this:

public class ExpandableExample extends ExpandableListActivity {
    @Override
    public void onCreate() {
        super.onCreate(savedInstanceState);
        setListAdapter(new BaseExpandableListAdapterExample());
    }
}

The definition of BaseExpanableListAdapterExample is (inner class of ExpandableExample):

protected class BaseExpandableListAdapterExample extends BaseExpandableListAdapter {
}

Then you need to implement getChildView and getGroupView. What I did was:

public View getGroupView(int groupPosition, boolean isExpanded,
                         View convertView, ViewGroup parent) {
    View groupRow = getLayoutInflater().inflate(R.layout.group_row, null);
    TextView textView = (TextView) groupRow.findViewById(R.id.text_group);
    textView.setText(getGroup(groupPosition).toString());
    return groupRow;
}

public View getChildView(int groupPosition, int childPosition,
                         boolean isLastChild, View convertView, ViewGroup parent) {
    View childRow = getLayoutInflater().inflate(R.layout.child_row, null);
    TextView textView = (TextView) childRow.findViewById(R.id.text_child);
    textView.setText(getChild(groupPosition, childPosition).toString());
    return childRow;
}

Then you need to define both group_row.xml and child_row.xml under /res/layout/ directory. For example, my group_row.xml is as follows:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" >
    <TextView
        android:id="@+id/text_element"
        android:layout_width="fill_parent"
        android:layout_height="48dip"
        android:textSize="20sp"
        android:textColor="#fff"
        android:layout_marginLeft="48dip"
        android:gravity="center_vertical" />
</RelativeLayout>

Hope it helps. Comment if you have any question.

like image 161
licorna Avatar answered Oct 13 '22 12:10

licorna