2015-08-08 111 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作为位置? –