Estoy trabajando en una aplicación de muestra para aprender Android. Se supone que debe mostrar una lista de selección múltiple y cuando el usuario hace clic en el botón, debe mostrar los elementos seleccionados en un TextView en la parte superior. Parece que cuando trato de recuperar los elementos seleccionados de ListView, siempre se devuelve una matriz vacía. ¿Alguien puede explicarme por qué es este el caso y qué me falta para que funcione correctamente? (Para su información el código es un programa modificado de Comienzo Android 4 por Grant Allen)matriz vacía al usar getListView(). GetCheckedItemIds()
Aquí está el archivo de diseño xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
<TextView
android:id="@+id/selection"
android:layout_width="fill_parent"
android:layout_height="wrap_content" />
<Button
android:id="@+id/getSelections"
android:text="Show Selections"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="listSelected" />
<ListView
android:id="@android:id/list"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:drawSelectorOnTop="false"
android:choiceMode="multipleChoice" />
</LinearLayout>
Y aquí es el Java asociado:
package com.commonsware.android.checklist;
import android.os.Bundle;
import android.app.ListActivity;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.TextView;
import android.view.*;
public class ChecklistDemo extends ListActivity {
private static final String[] items={"lorem", "ipsum", "dolor",
"sit", "amet",
"consectetuer", "adipiscing", "elit", "morbi", "vel",
"ligula", "vitae", "arcu", "aliquet", "mollis",
"etiam", "vel", "erat", "placerat", "ante",
"porttitor", "sodales", "pellentesque", "augue", "purus"};
private TextView selection;
@Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
setContentView(R.layout.main);
setListAdapter(new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_multiple_choice,
items));
selection = (TextView)findViewById(R.id.selection);
}
public void listSelected(View view) {
long[] chosenOnes = getListView().getCheckedItemIds();
selection.setText("Items selected: ");
selection.setText(Integer.toString(chosenOnes.length));
for (long x:chosenOnes) {
int i = Long.valueOf(x).intValue();
selection.setText(selection.getText() + ", " + items[i]);
}
}
}
impresionante, Muchísimas gracias por eso. Como seguimiento, ¿puedo pedir una aclaración sobre qué es exactamente lo que hace que los identificadores sean estables? –
Sí, también me gustaría saber. Supongo que significa que cada id. Siempre corresponde al mismo objeto, pero la documentación no está del todo clara. – Timmmm
puede anular el método hasStableIds() en BaseAdapter por ejemplo, y dejar que sea verdadero si su getId() se implementa correctamente. – Ostkontentitan