Android: Cómo deshabilitar los elementos de la lista en la creación de la lista
Soy bastante nuevo en Android dev y todavía trabajo un montón de cosas.
Tengo un menú principal mostrando usando el código siguiente, pero no puedo resolver cómo deshabilitar elementos seleccionados en el menú. ¿Puede alguien ayudarme con algún código de ejemplo?
- Diálogo de lista personalizada de Android
- ExpandableListView no reacciona y recibe ningún clic
- Android - arrastrar y soltar - reorganizar la lista
- OnItemClickListener (), cómo pasar los datos del elemento pulsado?
- Android: Obtención de la lista de aplicaciones del dispositivo - Muy lento
public class listTest extends ListActivity { @Override public void onCreate(Bundle savedState) { super.onCreate(savedState); setListAdapter(ArrayAdapter.createFromResource(this, R.array.mainMenu, android.R.layout.simple_list_item_1)); //not sure how to disable list items here } protected void onListItemClick(ListView list, View view, int position, long id) { // can disable items when they are clicked on view.setEnabled(false); } }
Y tengo una string-array
en mi archivo strings.xml:
<?xml version="1.0" encoding="utf-8"?> <resources> <string-array name="mainMenu"> <item>Item 1</item> <item>Item 2</item> <item>Item 3</item> </string-array> </resources>
Gracias
- Android: ¿Cómo puedo comprobar un elemento en particular en CheckView ListView?
- Cómo actualizar el contenido de una sola fila en mi ListView utilizando OnItemClick
- Vista de lista personalizada con el problema de la casilla de verificación
- Lista de guardar de Android <String>
- Reordenación de listas como listas de reproducción en el reproductor multimedia
- ListView cambiar el texto en el elemento de clic
- Lista de todos los dispositivos Android con características
- Vista de lista de Android con el problema de la casilla de verificación
Para deshabilitar los elementos de la lista en la creación de la lista usted tiene que subclase de ArrayAdapter
. Tienes que anular los siguientes métodos: isEnabled(int position)
y areAllItemsEnabled()
. En el primero, devuelve true
o false
dependiendo de si el elemento de lista en la posición dada está habilitado o no. En el último usted devuelve false
.
Si desea utilizar createFromResource()
, tendrá que implementar ese método también, ya que el ArrayAdapter.createFromResource()
sigue instancia ArrayAdapter
lugar de su propio adaptador.
Por último, el código sería algo como lo siguiente:
class MenuAdapter extends ArrayAdapter<CharSequence> { public MenuAdapter( Context context, int textViewResId, CharSequence[] strings) { super(context, textViewResId, strings); } public static MenuAdapter createFromResource( Context context, int textArrayResId, int textViewResId) { Resources resources = context.getResources(); CharSequence[] strings = resources.getTextArray(textArrayResId); return new MenuAdapter(context, textViewResId, strings); } public boolean areAllItemsEnabled() { return false; } public boolean isEnabled(int position) { // return false if position == position you want to disable } }
Creo que si un elemento de lista está habilitado o no es parte del estado de ese elemento, así que supongo que tienes que administrarlo en tu ListAdapter
. Al subclasificar un adaptador, puede anular isEnabled(position)
. Para cualquier posición que devuelva true aquí, el ListView marcará este elemento como deshabilitado.
Así que lo que quieres hacer es algo como esto:
class MenuAdapter extends ArrayAdapter<String> { public boolean isEnabled(int position) { // return false if position == positionYouWantToDisable } }
Esto probablemente requiera, por ejemplo, un Map
gestione el estado activado de cada elemento si desea poder habilitar o deshabilitar un elemento utilizando un setter.
A continuación, establezca el adaptador personalizado en su ListView.
Puede desactivar un elemento de lista (= hacer que no responda a los toques) llamando a ambos
setClickable(false)
y
setFocusable(false)
En su adaptador, por ejemplo.
De forma predeterminada, sin embargo, esto no se refleja automáticamente gráficamente.
Actualmente estoy usando eso en una lista cuyos elementos de lista no son accesibles, pero la mayoría de los cuales contienen widgets que se pueden hacer clic. Funciona bien.
De esta forma, los elementos de la lista se dibujan normalmente incluyendo el separador (véase la respuesta de Janusz a la respuesta aceptada anterior).
O de manera sencilla para no registrar y registrar OnItemClickListener puede ser una mejor idea.
Para registrar:
LstDevice.setOnItemClickListener (contexto);
Para cancelar la inscripción:
LstDevice.setOnItemClickListener (null);
- Mantenimiento de versiones gratuitas y pro de una aplicación
- Android y Robotium – Prueba la actividad que espera un extra?