1

以下問題令我瘋狂。我已經定義的XML片段,使用此代碼:在列表視圖中啓用選擇

<fragment class="host.helperclass.ServiceListFragment" 
     android:id="@+id/titles" 
     android:layout_height="match_parent" 
     android:layout_weight="1" 
     android:layout_width="0px"/> 

然後我實現ServiceListFragment類延伸SherlockListFragment

我已經覆蓋了onActivityCreated方法,使用此代碼:

getListView().setChoiceMode(ListView.CHOICE_MODE_SINGLE); 
getListView().setDividerHeight(2); 
getListView().setBackgroundColor(Color.parseColor("#EEEEEE")); 
getListView().setCacheColorHint(Color.parseColor("#00000000")); 
getListView().setSelector(R.drawable.list_selector); 

哪裏list_selector.xml很簡單:

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:state_pressed="true" 
     android:drawable="@drawable/green"/> 
    <item android:state_focused="true" 
     android:drawable="@drawable/green"/> 
    <item android:state_selected="true" 
     android:drawable="@drawable/green"/> 
</selector> 

但綠色背景的項目,當我按下只添加按鈕。當我釋放它時,綠色背景被刪除。好像state_selected不被識別。 這可能嗎?如果是這樣,有什麼辦法可以選擇ListView內的物品嗎?

注:

我也試圖用selctor只有一個項目:

<item android:state_focused="true" 
     android:drawable="@drawable/green" /> 

而作爲結果,我obtaint的是,當我按下ListView項的背景變成綠色,但是當我釋放它時,綠色背景被刪除。當我從物品上拔下手指時,似乎我的物品失去了焦點。

編輯:

我已經作出的又一次嘗試。

我的onListItemClick方法中添加這行代碼:

getListView().setItemChecked(index, true); 

,在我的XML選擇我已經把僅此一項:

<item android:state_checked="true" 
     android:drawable="@drawable/green" /> 

但奇怪的是,這並不工作。

+0

我不明白你的問題。當使用鍵盤/ dpad/trackball/etc選擇某個項目時,會使用'state_selected'嗎?即使ListView未被按下,您希望背景變爲綠色? –

+0

好的......我明白了...查看我的回答 –

回答

0

我發現這個問題。

定義在自定義適配器使用該行的XML佈局,我需要添加此行,根元素:

android:background="?android:attr/activatedBackgroundIndicator" 

但是,activatedBackgroundIndicator因爲API級別11已被引入的屬性,因此我將xml的以前版本放在佈局文件夾中,並將新版本放在layout-v11文件夾中。

而且下面的語句是必需的,該onListItemClick方法內:

getListView().setItemChecked(position, true); 
1

我相信單一選擇模式的正確狀態是android:state_activated

我注意到你正在使用列表的選擇器。

您應該使用它作爲列表行(在適配器中使用的行)的背景。

例如:

row_background.xml

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:state_activated="true" 
     android:drawable="@drawable/green"/> 
</selector> 

row_layout.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:background="@drawable/row_background"> 

    <!-- your views --> 

</LinearLayout> 
+0

謝謝@Benito,我也試過了。 – GVillani82

+0

但正如我所說的,當按下狀態時正確添加背景 – GVillani82

+0

您的答案對於找到解決方案已經非常有用。謝謝 – GVillani82

0

試試這個。

添加此項目到選擇

<item android:state_selected="true" 
     android:state_pressed="false" 
     android:drawable="@drawable/green" /> 

,並刪除

<item android:state_selected="true" 
     android:drawable="@drawable/green"/> 
+0

謝謝@Abhishek,但它不起作用! :( – GVillani82

+0

請參閱本教程http://www.androidhive.info/2012/02/android-custom-listview-with-image-and-text/您可能會有一些想法 –