2012-09-14 69 views
5

我有一些很容易理解的代碼。我希望這個listview的一些特定的子項是不可點擊的。如何使一些listview項目不可點擊?

ArrayAdapter<String> adapter = 
     new ArrayAdapter<String>(this,R.layout.list_item,R.id.module_name_item, testdata); 

    m_listview.setAdapter(adapter); 


    Log.i("check","1"); 
    if(sectionAttempts.get(0).equals("0")) 
    { 

     m_listview.getChildAt(2).setEnabled(false); 
     m_listview.getChildAt(3).setEnabled(false); 
    } 
    else 
    { 

     if(sectionAttempts.get(2).equals("0")) 
     { 

      m_listview.getChildAt(3).setEnabled(false); 
     } 


    } 

我在

m_listview.getChildAt(2).setEnabled(false); 

爲顯示java.lang.NullPointerException收到錯誤。我試圖找到錯誤並使用Log.i(「check」,m_listview.getChildCount());它顯示0.所以我猜測列表視圖尚未創建!這怎麼可能。

什麼似乎是問題?感謝提前任何幫助。

+0

發佈什麼錯誤你得到 – slezadav

+0

@slezadav:plzz查看更新的問題。我猜我的listview不是在我調用這些語句之前創建的? – Abhinav

回答

15

重寫areAllItemsSelectable()方法。返回false表示所有項目都不可點擊。

@Override 
public boolean areAllItemsSelectable() { 
    return false; 
} 

,然後覆蓋下面的方法要返回的項目無法點擊

@Override 
public boolean isEnabled(int position) { 
    if(position == your_item_pos) { 
     return false; 
    } 
    return true; 
} 
+0

我的代碼有什麼問題? – Abhinav

+0

非常好的解決方案,谷歌認爲一切 –

+0

此方法防止分隔線顯示在我的列表項之間。相反,我在ListView的'android:listSelector =「@ android:color/transparent」'的XML中設置了以下屬性,它爲我工作。 – Richard

0

好像你沒有用來初始化你的ListView。在onCreate中使用m_listview=getListView()如果您正在使用ListActivity或m_listview=findViewById(R.id...)如果您正在使用常規活動。

7

分享我的經驗,下面做的伎倆(圖指的是列表項視圖):

view.setEnabled(false); 
view.setOnClickListener(null); 
  • 通過重寫方法,該方法被調用從來沒有工作實現。
  • 將焦點設置爲false並不適用。