0

我有一个覆盖了 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() 中设置的视图标签。日志显示 bindView() 在调用时没有获得所需的视图。

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

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

4

1 回答 1

3

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

您还需要覆盖getViewTypeCount否则getItemViewType将无法正常工作。

于 2013-05-02T04:46:10.120 回答