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?

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

    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);

    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.