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(); }