2010-04-18 12 views
16

Tengo una vista de lista que se completa mediante registros de la base de datos. Ahora tengo que hacer algunos registros visibles pero no disponibles para la selección, ¿cómo puedo lograr eso?Cómo deshabilitar elementos en una Vista de lista?

aquí está mi código

public class SomeClass extends ListActivity { 
    private static List<String> products; 
    private DataHelper dh; 
    public void onCreate(Bundle savedInstanceState) { 
     dh = new DataHelper(this); 
     products = dh.GetMyProducts(); /* Returns a List<String>*/ 
     super.onCreate(savedInstanceState); 
     setListAdapter(new ArrayAdapter<String>(this, R.layout.myproducts, products)); 
     ListView lv = getListView(); 
     lv.setTextFilterEnabled(true); 
     lv.setOnItemClickListener(new OnItemClickListener() { 
      @Override 
      public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) { 
       // TODO Auto-generated method stub 
       Toast.makeText(getApplicationContext(), ((TextView) arg1).getText(), Toast.LENGTH_SHORT).show(); 
      } 
     }); 
    } 
} 

El myproducts.xml archivo de distribución es la siguiente:

<?xml version="1.0" encoding="utf-8"?> 
<TextView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:padding="10dp" 
    android:textSize="16sp"> 
</TextView> 

Respuesta

31

Haga su propia subclase de ArrayAdapter que tiene AreAllItemsEnabled() retorno falsa, y definir isEnabled(int position) para volver verdadero/falso para un elemento dado en su conjunto de datos.

+13

Tenga cuidado con esta solución. La documentación de BaseAdapter establece lo siguiente "Devuelve verdadero si el elemento en la posición especificada no es un separador". Eso significa que si devuelve falso, el artículo es un elemento separador. Algunos teléfonos no pueden dibujar el android: divisor entre un elemento normal y un elemento separador. – Janusz

+2

Eso es definitivamente cierto y me he encontrado con ese problema antes; He incluido un divisor en el diseño de la fila y lo he mostrado/oculto en getView(), o dejé los elementos habilitados pero ignoré los clics en ellos y establecí un fondo que no tiene un estado presionado para que no se vean clicable. –

+0

¡Excelente para colocar separadores de "Título", para tener secciones en su lista! – htafoya

Cuestiones relacionadas