Selección / resaltado de varios elementos en listview con adaptador personalizado – Android
He seguido un buen tutorial, con algunos cambios, para crear un ListView personalizado que me permitirá mostrar varias imágenes para cada fila en mi ListView. Lo que me gustaría hacer es resaltar mediante la selección de varios elementos de la lista y luego realizar algún tipo de acción a todos los elementos de la lista mediante la selección de una opción en mi menú de opciones. Sin embargo, el problema que parece estar corriendo en es que no puedo seleccionar varios elementos, a pesar de que he añadido android:choiceMode="multipleChoice"
para el ListView en el archivo .xml. Me doy cuenta de que esto se puede hacer usando casillas de verificación o botones de radio, pero preferiría evitar eso. He adjuntado mi código fuente a continuación. Cualquier ayuda sería apreciada. Por último, gracias a http://custom-android-dn.blogspot.com/ por un gran tutorial. Gracias.
CustomlistviewActivity.java
- Vida útil de las variables estáticas (clase)
- Fuera de memoria con imágenes en Android 5
- ¿Existe un estándar de documentación para atributos personalizados de estilo XML en Android?
- Biblioteca Java para consumir / manipular Sharepoint 2013 Resto OData Resultado XML
- Agitar dispositivo para iniciar la aplicación
package DucNguyen.example.customlistview; public class CustomlistviewActivity extends Activity { private ListView listViewFootballLegend; private Context ctx; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_customlistview); ctx=this; List<FootballLegend> legendList= new ArrayList<FootballLegend>(); legendList.add(new FootballLegend("Pele","October 23, 1940 (age 72)","pele","brazil")); legendList.add(new FootballLegend("Diego Maradona","October 30, 1960 (age 52)","maradona","argentina")); legendList.add(new FootballLegend("Johan Cruyff","April 25, 1947 (age 65)","cruyff","netherlands")); legendList.add(new FootballLegend("Franz Beckenbauer","September 11, 1945 (age 67)","beckenbauer","germany")); legendList.add(new FootballLegend("Michel Platini","June 21, 1955 (age 57)","platini","france")); legendList.add(new FootballLegend("Ronaldo De Lima","September 22, 1976 (age 36)","ronaldo","brazil")); listViewFootballLegend = ( ListView ) findViewById( R.id.FootballLegend_list); listViewFootballLegend.setAdapter( new FootballLegendListAdapter(ctx, R.layout.legend_row_item, legendList ) ); // Click event for single list row listViewFootballLegend.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { FootballLegend o = (FootballLegend) parent.getItemAtPosition(position); Toast.makeText(CustomlistviewActivity.this, o.getName().toString(), Toast.LENGTH_SHORT).show(); } }); } }
FootballLegendListAdapter.java
package DucNguyen.example.customlistview; public class FootballLegendListAdapter extends ArrayAdapter<FootballLegend> { private int resource; private LayoutInflater inflater; private Context context; public FootballLegendListAdapter ( Context ctx, int resourceId, List<FootballLegend> objects) { super( ctx, resourceId, objects ); resource = resourceId; inflater = LayoutInflater.from( ctx ); context=ctx; } @Override public View getView ( int position, View convertView, ViewGroup parent ) { convertView = ( RelativeLayout ) inflater.inflate( resource, null ); FootballLegend Legend = getItem( position ); TextView legendName = (TextView) convertView.findViewById(R.id.legendName); legendName.setText(Legend.getName()); TextView legendBorn = (TextView) convertView.findViewById(R.id.legendBorn); legendBorn.setText(Legend.getNick()); ImageView legendImage = (ImageView) convertView.findViewById(R.id.legendImage); String uri = "drawable/" + Legend.getImage(); int imageResource = context.getResources().getIdentifier(uri, null, context.getPackageName()); Drawable image = context.getResources().getDrawable(imageResource); legendImage.setImageDrawable(image); ImageView NationImage = (ImageView) convertView.findViewById(R.id.Nation); uri = "drawable/" + Legend.getNation(); imageResource = context.getResources().getIdentifier(uri, null, context.getPackageName()); image = context.getResources().getDrawable(imageResource); NationImage.setImageDrawable(image); return convertView; } }
FootballLegend.java
package DucNguyen.example.customlistview; public class FootballLegend { public FootballLegend(String name, String born, String image, String nation) { super(); this.name = name; this.born = born; this.image = image; this.nation = nation; } private String name; private String born; private String image; private String nation; public String getName() { return name; } public void setName(String nameText) { name = nameText; } public String getNick() { return born; } public void setNick(String born) { this.born = born; } public String getImage() { return image; } public void setImage(String image) { this.image = image; } public String getNation() { return nation; } public void setNation(String image) { this.image = nation; } }
Legend_row_item.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" android:orientation="horizontal" android:padding="5dip" > <!-- ListRow Left side Thumbnail image --> <LinearLayout android:id="@+id/thumbnail" android:layout_width="wrap_content" android:layout_height="wrap_content" android:padding="3dip" android:layout_alignParentLeft="true" android:layout_marginRight="5dip"> <ImageView android:id="@+id/legendImage" android:layout_width="50dip" android:layout_height="50dip" /> </LinearLayout> <TextView android:id="@+id/legendName" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignTop="@+id/thumbnail" android:layout_toRightOf="@+id/thumbnail" android:textColor="#040404" android:typeface="sans" android:textSize="15dip" android:textStyle="bold"/> <TextView android:id="@+id/legendBorn" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_below="@id/legendName" android:textColor="#343434" android:textSize="10dip" android:layout_marginTop="1dip" android:layout_toRightOf="@+id/thumbnail" /> <ImageView android:id="@+id/Nation" android:layout_width="45dp" android:layout_height="30dp" android:layout_alignParentRight="true" android:layout_marginRight="5dp" android:layout_centerVertical="true" /> </RelativeLayout>
Activity_customlistview.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="fill_parent" android:orientation="vertical" > <ListView android:id="@+id/FootballLegend_list" android:layout_width="fill_parent" android:layout_height="fill_parent" android:paddingTop="5dp" android:choiceMode="multipleChoice" > </ListView> </LinearLayout>
- ¿Cómo puedo convertir un archivo jar en formato apk?
- Android Webview, Configuración de clic largo habilitado en los enlaces exclusivamente?
- Acceso a Android Wear Fit Data
- Android: ¿Es seguro poner una cadena sensible en mi código Java?
- Cómo obtener los archivos de la ruta correcta en android
- Enviar correo automáticamente en fondo en Android
- Establecer orientación de pantalla para toda la aplicación
- HashMap con clave de matriz de bytes y valor de cadena - la función containsKey () no funciona
-
La
View
raíz de cada elemento que se mostrará en la lista debe implementarCheckable
. Al implementar esta interfaz, también se actualiza el estado de Vista. Vea esta respuesta para saber cómo hacer eso. -
Establecer un
<selector>
dibujable como fondo para estaView
raíz. Que color diferente / drawables para el estado comprobado y los estados normales. -
Establezca el modo de elección de
ListView
a opción única o opción múltiple. -
En el adaptador de lista, proporcione vistas de elementos con la Vista creada anteriormente como diseño principal.
Ahora, ListView
se encargará de establecer el estado marcado / no marcado en sus vistas de elemento. También puede llamar a getCheckedItemIds()
o getCheckedItemPositions()
en ListView
para obtener los elementos seleccionados actualmente.
- Windows 8 – Ejecución de Eclipse (Java VM no encontrada)
- Cómo agregar varias vistas al gestor de ventanas en Android