2010-04-18 2 views
16

У меня есть вид списка, который заполняется через записи из базы данных. Теперь мне нужно сделать некоторые записи видимыми, но недоступными для выбора, как я могу это достичь?Как отключить элементы в представлении списка?

вот мой код

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

Файл макета myproducts.xml выглядит следующим образом:

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

ответ

31

Сделать свой собственный подкласс ArrayAdapter, который имеет AreAllItemsEnabled() возвращение ложным, и определить isEnabled(int position) вернуться истина/false для данного элемента в вашем наборе данных.

+13

Будьте осторожны с этим решением. В документации BaseAdapter указано следующее: «Возвращает true, если элемент в указанной позиции не является разделителем». Это означает, что если вы возвращаете false, элемент является элементом разделителя. Некоторые телефоны не могут отображать андроид: разделитель между обычным элементом и элементом разделителя. – Janusz

+2

Это определенно верно, и я столкнулся с этим вопросом раньше; Я либо включил разделитель в макет строки, либо показал/скрыл его в getView(), либо оставил элементы включенными, но проигнорировал клики на них и установил фон, который не имеет нажатого состояния, чтобы они не выглядели кликабельны. –

+0

Отлично, чтобы разместить разделители «Заголовок», чтобы иметь разделы в вашем списке! – htafoya