2012-12-28 47 views
0

讓我說我有我的看法,我用它作爲切換按鈕。當用戶點擊它時,我通過setBackgroundResource()更改背景。列表數量約爲15件,ListView只能在屏幕上顯示7件左右。什麼是最好的方式來更改ListView中的所有項目的drawable

起初,我嘗試使用ListView.getChildAt(position),但是當位置超過7時,它會返回NullPointer。事件ListView.getCount()返回15.但這是有道理的,因爲它只顯示可見的孩子。

然後我通過循環解決它通過綁定到這個Adapter所有數據,更改布爾值,並調用notifyDataSetChange()

所以循環的數量將是15更新數據+ 7顯示可見視圖。

最好的方法應該是15,完成了。 有沒有辦法實現這一點?

謝謝

回答

1

忘記你的孩子的索引。您應該只在適配器中切換某種類型的標誌。

然後當你的getView方法被再次調用時,它會重畫你的列表。

即:

public class YourAdapter extends BaseAdapter { 

    private boolean useBackgroundTwo = false; 

    .. constructor .. 

    @Override 
    public View getView (int position, View convertView, ViewGroup parent) { 

     ... 


     ... 


     View background = findViewById(...); 

     int backgroundResource = R.drawable.one; 
     if(useBackgroundTwo){ 
      backgroundResource = R.drawable.two; 
     } 
     background.setBackgroundResource(backgroundResource); 



     .... 
    } 

    public void useNewBackground(){ 
     this.useBackgroundTwo = true; 
     notifyDataSetChanged(); 
    } 

    public void useOldBackground(){ 
     this.useBackgroundTwo = false; 
     notifyDataSetChanged(); 
    } 

} 
您的活動代碼

然後:

((YourAdapter) listview.getAdapter()).useNewBackground(); 

進一步考慮它,你可以使用一個枚舉,而不是一個布爾值,並有多種方法setBackgroundGreen()setBackgroundRed()或者你會傳遞在你想要使用的drawable中setItemBackground(R.drawable.one);選擇是你的。

Api: Adapter

+0

謝謝,這啓發了我。 – SaintTail

相關問題