2012-09-14 35 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并不适用。