2015-08-08 68 views
0

我有一個ListView從數據庫填充使用自定義ResourceCursorAdapterbindView格式化每個列表項目。這些項目按照時間順序顯示,我需要突出第一個未來事件。不幸的是,我只知道這是我處理下一個條目並發現它是過去的第一個未來事件。我真正需要的是在bindView處理中「向前看」的能力,但這不在那裏。更改顯示的ListView中的項目的背景

唯一的選擇(我能想到的)是處理所有項目,然後回去改變第一個未來事件的背景(然後我會知道)。

我正在使用的代碼是

EventsAdapter db = new EventsAdapter(this); 
    db.open(); 

    Cursor cursor = db.fetchAllRecords(); 

    final MyAdapter listitems = new MyAdapter(this,R.layout.timeline_detail, cursor, 0); 
    timeline.setAdapter(listitems); 

    db.close(); 

    View v = timeline.getChildAt(firstEvent); // firstevent is set in the bindView 
    v.setBackgroundColor(Color.parseColor("#ffd1d1")); 

但是視圖V始終爲空,當我在查看聲明斷點運行在調試模式下,列表視圖還沒有呈現在屏幕。因此,我假設這就是爲什麼視圖仍然爲空。

我怎樣才能得到changeViewListView項目需要在ListView第一次顯示時更改?

回答

1

嘗試並擴展您的適配器並覆蓋getView。

final MyAdapter listitems = new MyAdapter(this,R.layout.timeline_detail, cursor, 0){ 
    public View getView(int position, View convertView, ViewGroup parent){ 
     View v = super.getView(position, convertView, parent); 
     if (position==0){ 
      //Do something to the first item (v) 
     }else{ 
      //Revert what you did above, since views get recycled. 
     } 
     return v; 
    } 
}; 

或者只是將它包含在MyAdapter類中。

+0

謝謝,但這只是部分工作。我有一個光標,其中有14條記錄,其中8條在任何時候都顯示在屏幕上。當我第一次運行應用程序時,正確的記錄被突出顯示(這正是我在getView中所做的),但是當我上下滾動突出顯示的項目時,突然顯示的內容有時最多會變爲4個。 –

+0

因此突出顯示的視圖得到回收?這是我所理解的。在這種情況下,你只需要把一個'else {}'放在那個'if'中,併爲其餘的項目設置正常的背景。 –

+0

非常感謝。添加其他的東西可以解決問題。爲了我的啓發,你能解釋一下bindview和getview之間的關係嗎?對於通過光標位置的每一行,bindview是否調用getview作爲位置? –

相關問題