¿Y es posible personalizar el elemento secundario en la lista ampliable?Cómo agregar una imagen en la lista desplegable en el principal en android?
Respuesta
Trabajar con SimpleExpandableListAdapter
es cualquier cosa menos simple. Aquí hay un código que debe comenzar, suponiendo que esté usando ExpandableListActivity
.
En este ejemplo, utilizamos 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 personalizado niño, 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>
Puede intentar hacer su propio adaptador de lista que se extiende BaseExpandableListAdapter al igual que se describe en documentation.
Luego, anule getGroupView(..)
(para elementos primarios, o getChildView para elementos secundarios) 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>
Después se reemplaza getGroupView, puede utilizar setCompoundDrawablesWithIntrinsicBounds
función para añadir una imagen.
@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;
}
que acaba de encontrar una mejor manera, simplemente puede añadir
android:drawableRight="@drawable/icon"
línea a disposición de los archivos XML de grupo de la lista.
funciona como un encanto..Simple y EL MEJOR – Prabs
Prueba este >>> Tutorial
Y se puede actualizar con el fin de añadir una imagen en lugar de texto en el archivo XML niño
- 1. Temporizador en la lista desplegable con el botón dinámico Android
- 2. Imágenes en la lista desplegable
- 3. ¿Cómo agregar una imagen para el botón en Android?
- 4. Menú desplegable en android
- 5. Cómo agregar efectos de imagen en android?
- 6. Error en la lista desplegable
- 7. cómo enlazar una lista desplegable en gridview?
- 8. ¿Cómo usar iconos en una lista desplegable?
- 9. onchange en la lista desplegable
- 10. Cómo agregar un elemento desplegable en la barra de acciones
- 11. lista desplegable en rieles
- 12. Cómo agregar imágenes en la lista de selección
- 13. Cómo filtrar una lista desplegable en el administrador de Django cuando se realiza una selección en otra lista desplegable
- 14. validar una lista desplegable en asp.net mvc
- 15. ¿Cómo puedo agregar relleno a la lista desplegable html?
- 16. Desvanecimiento en la parte inferior de una lista desplegable en Android?
- 17. Cómo agregar DropDown en la aplicación de Android
- 18. Cómo agregar encabezado a la vista de lista En Android
- 19. Cómo agregar título en Spinner en android
- 20. ¿Cómo creo una ventana desplegable en la GUI de Android?
- 21. ¿Cómo agregar una imagen girada en CSS?
- 22. Validador para la lista desplegable en asp.net
- 23. Cómo puedo agregar una imagen en EditText
- 24. cómo agregar una imagen jpg en Latex
- 25. Implementación de la lista desplegable en R
- 26. ¿Cómo agregar una imagen en Tkinter?
- 27. Parte en negrita de una opción en una lista desplegable
- 28. Lista desplegable en la celda de Excel
- 29. Ordenar la lista desplegable alfabéticamente en AngularJS
- 30. Agregar elementos a la lista desplegable de Cinta mediante VB.NET
gran respuesta, debe ser aceptado – tomash
Sólo quería decir que esta es una gran ejemplo, ¡fue realmente útil! Gracias –
@emmby hola cómo agregar diferentes imágenes y texto a cada hijo de uno de los padres, es decir, – Sultan