我尝试使用Android's Data Binding features与自定义适配器和ListView。重写自定义适配器的getView
方法时遇到问题:
public class ChecksAdapter extends ArrayAdapter<Check> {
public ChecksAdapter(Context context, ObservableList<Check> checks) {
super(context, R.layout.check, checks);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
CheckBinding binding = DataBindingUtil.inflate(
LayoutInflater.from(getContext()),
R.layout.check, parent, false);
binding.setCheck(this.getItem(position));
// Return what?
}
}
所以我的问题是
- 在哪里可以得到应该返回的
View
元素?或者换句话说,如何将对象绑定到膨胀/转换的视图? - 使用数据绑定时如何重用
convertView
? - 这是实现这一点的正确方法吗?该指南对ListViews不是很清楚
以下是指南中ListViews的唯一参考:
如果您在ListView或RecyclerView适配器中使用数据绑定项,您可能更喜欢用途:
ListItemBinding binding = ListItemBinding.inflate(layoutInflater, viewGroup, false);
//or
ListItemBinding binding = DataBindingUtil.inflate(layoutInflater, R.layout.list_item, viewGroup, false);
7条答案
按热度按时间093gszye1#
你应该做以下平滑滚动虽然..
ryoqjall2#
根据this,您应该返回
binding.getRoot()
。返回与绑定关联的布局文件中最外面的视图。如果此绑定用于合并布局文件,则将返回合并标记中的第一个根。
pengsaosao3#
这里是Kotlin的变体:
1zmg4dgp4#
推荐方式
使用生成的Binding类代替DataBindingUtil类。参见文档。
如果在
Fragment
、ListView
或RecyclerView
适配器中使用数据绑定项,则可能更喜欢使用绑定类的inflate()
方法使用
代替
其他代码将与@sergi相同
qacovj5a5#
guz6ccqo6#
DataBindingUtil将ViewDataBinding对象保存到view.tag中,因此您可以稍后通过DataBindingUtil.getBinding(convertView)检索它
41zrol4v7#
对于GridView适配器或自定义适配器,以下代码对我有效:
MenuItemBinding基于布局文件的名称,此处布局文件的名称为**'menu_item.xml'**。