2014-09-20 88 views
0

我在導航抽屜中使用簡單的ListView,在佈局XML中設置了android:choiceMode="singleChoice"。這讓我使用的文本顏色選擇:禁止選擇某些ListView項目,但仍然獲得點擊事件?

<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:state_activated="true" android:color="@color/primary_500" /> 
    <item android:color="@color/text_primary" /> 
</selector> 

這將色彩與primary_500所選擇的項目,並與text_primary休息。


以上工作正常,但其中一個項目將推出,而不是加載一個片段一個新的活動,所以它不應該做出選擇項目的ListView的。

我試過這個恢復它:

public void selectItem(int index) { selected_item = index; } 

public void revertSelectedItem() { 
    int y = navigation.getScrollY(); 
    list.setSelection(selected_item); 
    list.scrollTo(0, y); 
} 

和其他地方:

@Override 
public void onItemClick(ListView list, View view, int index, long id) { 
    switch((int)id) { 
     case R.id.exampleItem_forFragment: 
      /* Swap fragments */ 
      selectItem(index); 
      break; 

     case R.id.exampleItem_forActivity: 
      /* Launch activity */ 
      revertSelectedItem(); 
      break; 
    } 
} 

但是,即使revertSelectedItem()被調用時,選擇沒有改變。我假定在onItemClick()返回後纔會分配新的選擇,所以我的更改被覆蓋。


有沒有乾淨的方法來禁用或恢復選擇只能更改某些項目,但仍收到的點擊事件?

回答

0

似乎我只是誤解了一些方法的目的。將revertSelectedItem()更改爲如下所示:

public void revertSelectedItem() { 
    list.setItemChecked(selected_item, true); 
} 

表現得和我想要的完全一樣。它看起來像ListView使用項目的「檢查」狀態,而不是選擇,來決定哪些項目被標記。當在choiceMode="singleChoice"中時,調用setItemChecked()也會自動取消所有其他項目。