2011-03-30 37 views
3
做一個ListView項目發光

這是我的問題:我有一個Activity,其中包括ListView列出不同的位置,並MapView帶有標記到這些位置。從代碼

我現在想要的是,當點擊其中一個MapView標記時,讓相應的ListView項目被選中併發光(就好像它被點擊了一樣)。

我找到了方法ListView.setSelection(int)ListView.requestChildFocus(View, View)。第一個功能幾乎可以滿足我的需求(如果我有一個很長的列表,它會遍歷它,直到該項目可見),但它沒有明確顯示該項目的發光效果。關於第二個問題,我不確定第二個參數是什麼(這是以前關注的活動視圖?)。

那麼,有沒有辦法讓物品發光?就像使用物理鍵盤選擇它一樣。

謝謝。

編輯:子問題,是否有可能獲得標準繪圖用作背景時ListView項被點擊? R.attr可以找到像listPreferredItemHeight之類的東西嗎?

+0

光暈效果不觸摸模式下工作,所以你必須以某種方式要求休假的Android觸控模式,並呼籲爲setSelection。不知道如何從我的頭頂上。也許可以使列表視圖項目在觸摸模式下可以聚焦? – CodeFusionMobile 2011-03-30 13:37:08

+0

感謝您的回覆,我會看看這個觸摸模式的事情。 我也添加了一個子問題。 – Takhiarel 2011-03-30 13:59:20

回答

5

而不是選擇項目,你想讓他們檢查。這允許您使用StateListDrawable更改項目的外觀,因爲項目在處於觸摸模式時不會保持選定狀態。您必須將ListView置於單選模式,使您的列表視圖項目可選,並使用StateListDrawable更改已選項目的外觀。

把你的ListView單選擇方式:

getListView().setChoiceMode(ListView.CHOICE_MODE_SINGLE); 

然後,當你想在你ListView突出顯示某個項目,你這樣做:

getListView().setItemChecked(index, true); 

相信的根項目的行的佈局必須實現Checkable,您應該可以在線找到CheckableRelativeLayoutCheckableLinearLayout的示例。

,使你的項目「選中」,但你仍然需要使它發光,所以在你行的佈局,你必須使用一個StateListDrawable來改變它的外觀時,它是通過將這一佈局檢查:

​​

和創建color\list_view_item_selector.xml文件是這樣的:

<?xml version="1.0" encoding="UTF-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:state_checked="true" android:drawable="@color/selected_item" /> 
    <item android:drawable="@android:color/transparent" /> 
</selector> 
+0

好吧,它的工作原理!非常感謝,我可以花上幾天的時間。 順便說一句你不是指「drawable \ list_view_item_selector.xml」嗎? – Takhiarel 2011-03-30 15:36:26

+0

我想補充一點,爲了讓ListView自動滾動,'setSelection()'必須在'setItemChecked()'後調用(我不知道爲什麼)。 – Takhiarel 2011-03-30 15:51:43

+0

好的,最後的評論(奧利?): 我在我的例子中使用了一個'CheckedTextView',我沒有必要在一個新類中實現'Checkable'。 – Takhiarel 2011-03-30 15:53:44