2010-04-18 16 views
16

Ho una vista elenco che viene popolata tramite record dal database. Ora devo rendere visibili alcuni dischi ma non sono disponibili per la selezione, come posso ottenerlo?Come disabilitare gli elementi in una visualizzazione elenco?

Ecco il mio codice

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

Il file di layout myproducts.xml è la seguente:

<?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> 

risposta

31

Fai la tua sottoclasse di ArrayAdapter che ha AreAllItemsEnabled() return false, e definire isEnabled(int position) che restituisca true/falso per un dato elemento nel tuo set di dati.

+13

Attenzione a questa soluzione. La documentazione di BaseAdapter afferma quanto segue "Restituisce true se l'elemento nella posizione specificata non è un separatore". Ciò significa che se restituisci false l'elemento è un elemento separatore. Alcuni telefoni potrebbero non disegnare l'androide: divisore tra un oggetto normale e un elemento separatore. – Janusz

+2

Questo è assolutamente vero e mi sono imbattuto in quel problema prima; Ho incluso un divisore nel layout di riga stesso e mostrato/nascosto in getView(), o lasciato gli elementi abilitati ma ho ignorato i clic su di essi e ho impostato uno sfondo che non ha uno stato premuto in modo che non guardino cliccabile. –

+0

Ottimo per posizionare i divisori "Titolo", in modo da avere sezioni nella tua lista! – htafoya

Problemi correlati