2013-03-06 61 views
0

我有一個課程(A_Main.java)延伸ArrayAdapter。我將我的ListView設置爲使用A_Main,因爲它的ListAdapter。在A_Main.getView()裏面,我膨脹視圖以獲得每行的ListView小部件。每行包含一個TextView,CheckBox和一個ImageButton。點擊ImageButton時,播放與TextView相關的歌曲。我不想在ListView上使用onItemClickListener(),因爲它太容易摸索滾動並開始播放新歌。從Android中的OnClickListener充氣ListView行?

當我在新行中單擊ImageButton時,我需要取消當前正在播放的歌曲的ImageButton,並將hilite放入新的。我想這樣做的方式是在ImageButton的onClickListener()中增加視圖,並在列表中單擊每個按鈕,然後是hi-lite中正在播放的按鈕。我不確定最好的方式去做這件事。我可以保留每個ImageButton ID的A_Main的成員列表,因爲getView()遍歷它們並直接從onClickListener()引用ID而不會導致內存泄漏?只要getView()與他們完成這些ID是否消失?任何想法的替代方法?

enter image description here

+0

怎麼樣拿一個可繪製的選擇器..? – Pragnani 2013-03-06 17:28:30

+0

選擇器不會保持狀態。它只對點擊/觸摸時的按鈕動畫有用。除非有另一種方式? – wufoo 2013-03-06 17:33:08

+0

檢查我的答案... – Pragnani 2013-03-06 17:43:59

回答

2

編輯:

解決方案可能是簡單的以布爾數組全球這樣

private final boolean[] selectedstates; 

而且在構造函數

selectedstates= new boolean[yourlist.size()]; 

而且在出側列表的大小初始化onclick聽衆設置像這樣

yourbutton.setSelected(selectedstates[position]); 

我希望這將有助於你


試試這個

採取用戶自定義選擇與選擇和非選擇

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 

    <item android:drawable="@drawable/pause_button" 
      android:state_selected="true" /> 
    <item android:drawable="@drawable/play_button" /> 
</selector> 

1.創建一個全局變量

兩種不同的狀態圖像
Imageview previous; 

in您的自定義適配器和初始化它在構造函數中,你會得到內容

previous=new ImageView(context); 

添加在適配器getView()方法中,你可能會有一個onclickListener您的ImageView 做這樣

imagPlay.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      ImageView current=((ImageView)v); 
       current.setSelected(true); 
       previous.setSelected(false); 
       previous=current; 
     } 
    }); 

這會工作,我有信心,因爲我已經在我的應用程序中使用它。我希望這會幫助你

+0

謝謝!一個很棒的解決方案! – wufoo 2013-03-06 18:31:40

+0

經過一些測試後,ListView在滾動時不會正確更新按鈕狀態。某些按鈕出現在選中的那些按鈕上。你在getView()中使用什麼來糾正按鈕狀態? – wufoo 2013-03-06 18:46:47

+0

嘿,對不起,遲到的回覆,這是在印度的夜晚,所以我昨天去睡覺...我會更新回答.. – Pragnani 2013-03-07 04:48:56

1

應該看這個視頻。 http://www.youtube.com/watch?v=wDBM6wVEO70。尤其是viewholder部分可以重用視圖並避免內存泄漏。要突出顯示一個列表視圖行按鈕,請檢查您單擊的項目的位置,並通過設置該按鈕的背景來突出顯示該按鈕。

+0

謝謝,偉大的視頻!我已經實現了它所談論的ViewHolder類。我總是懷疑不斷findViewById()調用是一個性能問題,但從來不知道該怎麼做。 – wufoo 2013-03-06 18:32:48