简体   繁体   中英

Different layouts for child items

I am developing an app which contain a expandable list view.

In my expandable list view, I want to set different layout for each child view.

My custom Expandable list adapter is given below:

public Object getGroup(int arg0) 
{
    // TODO Auto-generated method stub
    return menu[arg0];
}

public int getGroupCount()
    {
    // TODO Auto-generated method stub
    return menu.length;
}

public long getGroupId(int arg0) {
    // TODO Auto-generated method stub
    return arg0;
}

public View getGroupView(int position, boolean arg1, View view, ViewGroup parent) 
{
    if(view==null)
    {
        view = inflater.inflate(R.layout.edit_head, null);

    }
    TextView head = (TextView)view.findViewById(R.id.list_item_text_view_head);
    head.setText(menu[position]);
    return view;
}

public Object getChild(int arg0, int arg1) {
    // TODO Auto-generated method stub
    return null;
}

public long getChildId(int arg0, int arg1) {
    // TODO Auto-generated method stub
    return 0;
}

public View getChildView(int groupPosition, int childPosition, boolean arg2, View childView,
        ViewGroup parent) 
{
    if(childView==null)
    {
        childView = inflater.inflate(R.layout.edit_child, null, false);
    }

    return childView;
}

But click on the list it doesn't show its child.

You can create you own adapter:

 public class ExpandableAdapter extends BaseExpandableListAdapter {

        @SuppressWarnings("unused")
        private Context context;
        private ArrayList<String> groups;
        private ArrayList<ArrayList<Expand>> expand;
        private LayoutInflater inflater;

        public ExpandableAdapter(Context context, 
                            ArrayList<String> groups,
                            ArrayList<ArrayList<Expand>> expand) { 
            this.context = context;
            this.groups = groups;
            this.expand = expand;
            inflater = LayoutInflater.from( context );
        }
        public Object getChild(int groupPosition, int childPosition) {
            return expand.get( groupPosition ).get( childPosition );
        }

        public long getChildId(int groupPosition, int childPosition) {
            return (long)( groupPosition*50+childPosition );
        }
        public View getChildView(int groupPosition, int childPosition, boolean isLastChild, 
                View convertView, ViewGroup parent) {
            View v = null;
            if( convertView != null )
                v = convertView;
            else
                v = inflater.inflate(R.layout.child_row, parent, false); 
            Expand c = (Expand)getChild( groupPosition, childPosition);
            TextView color = (TextView)v.findViewById( R.id.grp_child_primero);
            if( color != null )
                color.setText( c.getTitulo());
            TextView rgb = (TextView)v.findViewById( R.id.grp_child_segundo);
            if( rgb != null )
                rgb.setText( c.getDato());
            return v;
        }

        public int getChildrenCount(int groupPosition) {
            return expand.get( groupPosition ).size();
        }
        public Object getGroup(int groupPosition) {
            return groups.get( groupPosition );        
        }
        public int getGroupCount() {
            return groups.size();
        }

        public long getGroupId(int groupPosition) {
            return (long)( groupPosition*50 );
        } 
        public View getGroupView(int groupPosition, boolean isExpanded, View convertView, 
                                                                            ViewGroup parent) {
            View v = null;
            if( convertView != null )
                v = convertView;
            else
                v = inflater.inflate(R.layout.group_row, parent, false); 
            String gt = (String)getGroup( groupPosition );
            TextView expandGroup = (TextView)v.findViewById( R.id.grp_child_primero);
            if( gt != null )
                expandGroup.setText( gt );
            return v;
        }
        public boolean hasStableIds() {
            return true;
        }
        public boolean isChildSelectable(int groupPosition, int childPosition) {
            return true;
        } 
        public void onGroupCollapsed (int groupPosition) {} 
        public void onGroupExpanded(int groupPosition) {}

    }

With one xml for rows:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:background="@drawable/negro">

    <TextView android:id="@+id/grp_child_primero"
         android:focusable="false"
         android:textSize="20sp"
         android:textStyle="bold"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:gravity="center_vertical"
         android:background="@drawable/negro"/>

    <TextView android:id="@+id/grp_child_segundo"
         android:focusable="false"
         android:textSize="18sp"
         android:textStyle="normal"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:gravity="center_vertical"
         android:background="@drawable/negro"/>

</LinearLayout>

And other for groups:

<?xml version="1.0" encoding="utf-
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:background="@drawable/negro">

    <TextView android:id="@+id/grp_child_primero"
         android:layout_width="wrap_content"
         android:paddingLeft="30dp"
         android:textSize="20sp"
         android:textColor="@drawable/blanco"
         android:textStyle="normal"
         android:layout_height="wrap_content"
         android:gravity="center_horizontal|center_vertical"
         android:background="@drawable/negro"/>

</LinearLayout>

And after that:

ExpandAdapter youadapter = new ExpandAdapter(getApplicationContext(), 
        namesGroups, nameChilds);
setListAdapter(youadapter);

Where namesGroups and nameChilds are list the data for rows and groups. With the method setListAdapter, you can set the adapter to the ExpandableListActivity ;) And finally Expand class is a simple POJO:

public class Expand {
    public String titulo = null;
    public String dato = null;

    public Expand( String titulo, String dato) {
        this.titulo = titulo;
        this.dato = dato;
    }
    public String getTitulo() {
        return titulo;
    }
    public String getDato() {
        return dato;
    }
}

Looks primarily as getChildView method (in ExpandableAdapter class) is implemented, and some inside if you do not think it is complicated to implement what you want

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM