CursorAdapter bindView()无法正确映射到newView()返回的视图

时间:2013-05-02 04:42:03

标签: android android-cursoradapter

我有一个带有newView()和重写的bindView()的CursorAdapter。问题是bindView()没有正确映射到newView()创建的视图。

newView()根据游标值返回从不同布局中膨胀的两个不同视图,如下所示。

@Override
public View newView(Context context, Cursor cursor, ViewGroup parent){
    View view = null;
    int who = //... get a value from cursor

    switch(who){
    case 0:
        view = LayoutInflater.from(context).inflate(R.layout.first, null);
        view.setTag("case 0"); // for bindView() mapping inspection
        break;
    case 1:
        view = LayoutInflater.from(context).inflater(R.layout.second, null);
        view.setTag("case 1"); // for bindView() mapping inspection
        break;
    default:
        break;
    }
    return view;
}

然后,bindView()就像往常一样。从游标获取值并将值设置为从newView()返回的视图中的UI元素。没什么特别的。我放置了一个登录bindView(),显示了newView()中视图的标记集。 Log显示bindView()在调用时没有获得所需的视图。

我认为当调用bindView()时,如果有内存效率,它会绑定到现有视图。所以我认为bindView获取了一个可能由行_ID标识的特定视图。但似乎当它被调用时,它只会获得任何现有视图。

当视图可以有不同的布局时,如何让bindView获取具有特定布局的指定视图?

1 个答案:

答案 0 :(得分:3)

默认情况下,ListView中的所有项目都被视为相同的视图类型。您可以覆盖getItemViewType以根据位置返回不同的值。然后,视图将仅重用于相同的项目视图类型。

您还要覆盖getViewTypeCount,否则getItemViewType将无效。