故事是这样的:
我想在适配器中使用两种布局。所以基本上,我需要在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。
最佳答案
除了我对糟糕的数据库设计的评论外…
我将制作一个同时包装header
和content
布局的布局,然后将这两个布局的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/