17

I have a list view which is populated via records from the database. Now i have to make some records visible but unavailable for selection, how can i achieve that?

here's my code

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

The layout file myproducts.xml is as follows:

<?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>
zyamys
  • 1,609
  • 1
  • 21
  • 23
Prathamesh Shetye
  • 915
  • 2
  • 8
  • 27

1 Answers1

32

Make your own subclass of ArrayAdapter that has AreAllItemsEnabled() return false, and define isEnabled(int position) to return true/false for a given item in your data set.

Yoni Samlan
  • 37,905
  • 5
  • 60
  • 62
  • 13
    Be careful with this solution. The documentation of BaseAdapter states the following "Returns true if the item at the specified position is not a separator." That means if you return false the item is a separator item. Some phones may not draw the android:divider between a normal item and a separator item. – Janusz Jul 27 '11 at 09:51
  • 2
    That's definitely true and I've run into that issue before; I've either included a divider in the row layout itself and shown/hidden it in getView(), or left the items enabled but ignored clicks on them and set a background that doesn't have a pressed state so they don't look clickable. – Yoni Samlan Jul 27 '11 at 15:14
  • Great to place "Title" dividers, in order to have sections in your list! – htafoya Jul 22 '13 at 16:41