2010-04-18 47 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

使自己的擁有AreAllItemsEnabled()回報虛假ArrayAdapter的子類,並定義isEnabled(int position)返回true /對於數據集中的給定項目爲false。

+13

請小心使用此解決方案。 BaseAdapter的文檔聲明如下「如果指定位置的項目不是分隔符,則返回true。」這意味着如果您返回false,則該項目是分隔項目。有些手機可能無法在正常項目和分隔項目之間繪製android:divider。 – Janusz 2011-07-27 09:51:33

+2

這絕對是真的,我之前遇到過這個問題;我在行佈局本身中包含了一個divider,並將其顯示/隱藏在getView()中,或者將這些項目保持爲啓用狀態,但忽略了它們的點擊並設置了一個沒有按下狀態的背景,因此它們看起來不像點擊。 – 2011-07-27 15:14:07

+0

偉大的地方放置「標題」分隔線,爲了在您的列表中有部分! – htafoya 2013-07-22 16:41:56