example android expandablelistview expandablelistadapter

example - ¿Cómo agregar una imagen en la lista expandible en Parent en Android?



android expandablelistview appcompat (5)

Acabo de encontrar una mejor manera, simplemente puede agregar

android:drawableRight="@drawable/icon" línea al archivo de diseño xml del grupo de la lista.

¿Y es posible personalizar al niño en una lista ampliable?


Después de anular getGroupView, puede usar la función setCompoundDrawablesWithIntrinsicBounds para agregar imágenes.

@Override public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) { View v = super.getGroupView(groupPosition, isExpanded, convertView, parent); TextView tv = (TextView) v.findViewById(R.id.textViewId); tv.setCompoundDrawablesWithIntrinsicBounds(R.drawable.imageToAdd, 0, 0, 0); return v; }


Prueba esto >>> Tutorial

Y puede actualizarlo para agregar imágenes en lugar de texto en el archivo xml hijo


Puede intentar crear su propio adaptador de lista que extienda BaseExpandableListAdapter tal como se describe en la documentation .

A continuación, anule la función getGroupView(..) (para elemento principal, u getChildView para elemento hijo) y en esta función puede inflar su propio diseño xml.

algo como esto:

public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) { View v = convertView; if (v == null) { //sender is activity from where you call this adapter. Set it with construktor. LayoutInflater vi = (LayoutInflater)sender.getSystemService(Context.LAYOUT_INFLATER_SERVICE); v = vi.inflate(R.layout.row, null); } //children = arraylists of Child Child c = children.get(childPosition); if (c != null) { TextView tt = (TextView) v.findViewById(R.id.toptext); TextView bt = (TextView) v.findViewById(R.id.bottomtext); ImageView icon = (ImageView) v.findViewById(R.id.rowicon); if (tt != null) { tt.setText(c.text1); } if(bt != null){ bt.setText(c.text2); } if (icon != null) { icon.setImageResource(R.drawable.rowicon); } } return v; }

diseño xml:

<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="?android:attr/listPreferredItemHeight" android:padding="6dip"> <ImageView android:id="@+id/rowicon" android:layout_width="wrap_content" android:layout_height="fill_parent" android:layout_marginRight="6dip" /> <LinearLayout android:orientation="vertical" android:layout_width="0dip" android:layout_weight="1" android:layout_height="fill_parent"> <TextView android:id="@+id/toptext" android:layout_width="fill_parent" android:layout_height="0dip" android:layout_weight="1" android:gravity="center_vertical" /> <TextView android:layout_width="fill_parent" android:layout_height="0dip" android:layout_weight="1" android:id="@+id/bottomtext" android:singleLine="true" android:ellipsize="marquee" /> </LinearLayout> </LinearLayout>


Trabajar con SimpleExpandableListAdapter es cualquier cosa menos simple. Aquí hay un código que debe comenzar, suponiendo que esté usando ExpandableListActivity .

En este ejemplo, usamos el estándar android.R.layout.simple_expandable_list_item_1 para nuestra vista de encabezado de grupo, pero usamos nuestro propio diseño personalizado para los niños.

// Construct Expandable List final String NAME = "name"; final String IMAGE = "image"; final LayoutInflater layoutInflater = (LayoutInflater) this.getSystemService(Context.LAYOUT_INFLATER_SERVICE); final ArrayList<HashMap<String, String>> headerData = new ArrayList<HashMap<String, String>>(); final HashMap<String, String> group1 = new HashMap<String, String>(); group1.put(NAME, "Group 1"); headerData.add( group1 ); final HashMap<String, String> group2 = new HashMap<String, String>(); group2.put(NAME, "Group 2"); headerData.add( group2); final ArrayList<ArrayList<HashMap<String, Object>>> childData = new ArrayList<ArrayList<HashMap<String, Object>>>(); final ArrayList<HashMap<String, Object>> group1data = new ArrayList<HashMap<String, Object>>(); childData.add(group1data); final ArrayList<HashMap<String, Object>> group2data = new ArrayList<HashMap<String, Object>>(); childData.add(group2data); // Set up some sample data in both groups for( int i=0; i<10; ++i) { final HashMap<String, Object> map = new HashMap<String,Object>(); map.put(NAME, "Child " + i ); map.put(IMAGE, getResources().getDrawable(R.drawable.icon)); ( i%2==0 ? group1data : group2data ).add(map); } setListAdapter( new SimpleExpandableListAdapter( this, headerData, android.R.layout.simple_expandable_list_item_1, new String[] { NAME }, // the name of the field data new int[] { android.R.id.text1 }, // the text field to populate with the field data childData, 0, null, new int[] {} ) { @Override public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) { final View v = super.getChildView(groupPosition, childPosition, isLastChild, convertView, parent); // Populate your custom view here ((TextView)v.findViewById(R.id.name)).setText( (String) ((Map<String,Object>)getChild(groupPosition, childPosition)).get(NAME) ); ((ImageView)v.findViewById(R.id.image)).setImageDrawable( (Drawable) ((Map<String,Object>)getChild(groupPosition, childPosition)).get(IMAGE) ); return v; } @Override public View newChildView(boolean isLastChild, ViewGroup parent) { return layoutInflater.inflate(R.layout.expandable_list_item_with_image, null, false); } } );

Y dentro de su diseño infantil personalizado, llamado expandable_list_item_with_image.xml :

<?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="wrap_content"> <ImageView android:id="@+id/image" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <TextView android:id="@+id/name" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="right" /> </RelativeLayout>