2013-08-29 32 views
0

我在SOF阅读了许多关于CursorAdaptor的文章 - newView/getView/bindView。Android CursorAdapter getView/newView应该是膨胀一样的东西吗?

如果我为自动完成文本字段创建自定义适配器,我必须实现newView()和bindView()。

但有人说,实现getView()可以提高滚动时的速度。

所以,问题是,

如果上NewView的(),已膨胀的图。

public View newView(Context context, Cursor cursor, ViewGroup parent) { 
    final LayoutInflater inflater = LayoutInflater.from(context); 
    // =Single Line= 
    final TextView view = (TextView) inflater.inflate(android.R.layout.simple_list_item_1, parent, false); 
    String item = createItem(cursor); 
    view.setText(item);  
    return view; 
} 

所以在getView()上,我做了同样的事情吗?

+0

谁是“某人”?资源? – njzk2

+0

'view.setText(item);'应该在bindView中,而不是newView(同样,看代码中的getCursorAdapter中的getView会调用newView(如果需要)和bindView之后) – njzk2

回答

4

实现getView()newView()/bindView()组在性能方面是一样的,您应该选择更高版本的选项。对于基于Cursor的适配器,执行getView()方法时,将使用视图回收机制,并将行构造委派给newView()(构建行的视图)和bindView()(将数据绑定到行)方法。它也将Cursor移动到正确的位置。

另外,正如njzk2所指出的,您应该在bindView()方法中的视图上设置数据。 newView()方法将不会被调用ListView的每一行,它只会被调用的情况下,当没有可用的回收行时,这就是为什么您应该只有建立在newView()行视图。但是,每次都会调用bindView()方法,这里应该将Cursor中的数据绑定到行视图。

+0

如果它回收行,是否意味着我们不' t需要实现ViewHolder模式吗? –

+1

@IgorGanapolsky基于光标的适配器已经实现了回收机制,但是他们并没有实现持有者模式来避免在数据绑定时直接查看视图,如果你想为' ListView',那么你应该在'newView()'方法中自己实现持有者模式。 – Luksprog