Как отключить элементы в представлении списка?

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

вот мой код

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>

person Prathamesh Shetye    schedule 18.04.2010    source источник


Ответы (1)


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

person Yoni Samlan    schedule 18.04.2010
comment
Будьте осторожны с этим раствором. В документации BaseAdapter указано следующее: Возвращает true, если элемент в указанной позиции не является разделителем. Это означает, что если вы возвращаете false, элемент является элементом-разделителем. Некоторые телефоны могут не отображать android:divider между обычным элементом и элементом-разделителем. - person Janusz; 27.07.2011
comment
Это определенно правда, и я сталкивался с этой проблемой раньше; Я либо включил разделитель в сам макет строки и показал/скрыл его в getView(), либо оставил элементы включенными, но проигнорировал щелчки по ним и установил фон, который не имеет нажатого состояния, чтобы они не выглядели кликабельно. - person Yoni Samlan; 27.07.2011
comment
Здорово разместить разделители заголовков, чтобы иметь разделы в вашем списке! - person htafoya; 22.07.2013