android - bindView和newView,用于CursorAdapter中的两个视图布局

时间:2013-01-28 07:19:27

标签: android android-cursoradapter android-adapter

所以这就是故事:

我想在我的适配器中使用两个布局。所以基本上,我需要在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。

1 个答案:

答案 0 :(得分:0)

除了关于数据库设计不佳的评论(关于这个问题)......

我会制作一个包含headercontent布局的布局,然后将两个布局的header类型标记为visiblity="gone"。对于您需要bindView子视图的newViewheader行,请将其设为View.VISIBLE,将内容子视图设为View.GONE。当然,当你想要内容布局交换它们时。

根据我的评论,您可能需要ExpandableListView。我没有统计数据或测量数据,但我怀疑性能会更好。这也意味着您不依赖于将“标题”与数据相同的表格中的干扰解决方案。