Android数据绑定与自定义适配器

我试图使用Android的数据绑定function与自定义适配器和ListView。 我无法覆盖自定义适配器的getView方法:

 public class ChecksAdapter extends ArrayAdapter { public ChecksAdapter(Context context, ObservableList 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); 

据此,你应该返回binding.getRoot()

 View getRoot () 

返回与绑定关联的布局文件中最外层的视图。 如果此绑定是针对合并布局文件的,则将返回合并标记中的第一个根。

你应该做下面的顺利滚动虽然..

 @Override public View getView(int position, View convertView, ViewGroup parent) { CheckBinding binding; if(convertView == null) { binding = DataBindingUtil.inflate( LayoutInflater.from(getContext()), R.layout.check, parent, false); convertView = binding.getRoot(); } else { binding = (CheckBinding) convertView.getTag(); } binding.setCheck(this.getItem(position)); convertView.setTag(binding); return convertView; } 

为了完成这里是kotlin变种:

  val binding = convertView?.tag as? CheckBinding ?: CheckBinding.inflate(layoutInflater, parent, false) binding.check = this.getItem(position) binding.root.tag = binding return binding.root 
 ItemTickFilterBinding mFilterBinding; if (convertView==null) { mFilterBinding= DataBindingUtil.inflate( LayoutInflater.from(mContext), R.layout.item_tick_filter, parent, false); convertView.setTag(mFilterBinding); } else { mFilterBinding=(ItemTickFilterBinding)convertView.getTag(); }