故事是这样的:
我想在适配器中使用两种布局。所以基本上,我需要在newview()中有一个if来决定返回哪个视图,在bindview()中有一个if来知道在视图中要做什么。这是正确的方法吗?
我在想这样的事情:

@Override
public View newView(Context context, Cursor c,
        ViewGroup parent) {
    if (HEADER == getItemViewType(c.getPosition())){
        return (View) layoutInflater.inflate(R.layout.my_header, null);
    } else {
        return (View) layoutInflater.inflate(R.layout.my_row, null);
    }
}

然后在BindView上:
@Override
public void bindView(final View view, final Context context,
        Cursor c) {
    if (TYPE_HEADER == getItemViewType(c.getPosition())){
        // init and set values here e.g. view.findViewById().setText()
    } else {
        // init and set values here e.g. view.findViewById().setText()
    }
}

我走对了吗?因为根据我的日志,newview中的c.getPosition()对bindView中的c.getPosition()给出了不同的结果。我实际上正在考虑重写getview(),但他们说,好的做法是在cursoradapter中重写newview和bindview。

最佳答案

除了我对糟糕的数据库设计的评论外…
我将制作一个同时包装headercontent布局的布局,然后将这两个布局的header类型标记为visiblity="gone"。对于需要bindView子视图的newView行和header行,将其设置为View.VISIBLE子视图和View.GONE内容子视图。当然,当你想交换内容布局时。
根据我的评论,你可能想要ExpandableListView。我没有关于它的统计或测量,但我怀疑性能会更好。这也意味着您不需要依赖于将“header”与您的数据插入同一个表的黑客解决方案。

关于android - android-CursorAdapter中两个 View 布局的bindView和newView,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14557251/

10-11 17:36