首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Android数据绑定与自定义适配器

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

Stack Overflow用户
提问于 2015-11-26 16:53:46
回答 6查看 12.6K关注 0票数 16

我试图将Android的数据绑定功能与自定义适配器和ListView结合使用。我在重写自定义适配器的getView方法时遇到了困难:

代码语言:javascript
复制
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绑定= ListItemBinding.inflate(layoutInflater,viewGroup,false);/或ListItemBinding binding = DataBindingUtil.inflate(layoutInflater,R.layout.list_item,viewGroup,false);

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2015-11-26 17:23:32

根据,您应该返回binding.getRoot()

代码语言:javascript
复制
View getRoot ()

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

票数 11
EN

Stack Overflow用户

发布于 2016-03-23 10:11:12

但是,为了顺利滚动,您应该做以下操作。

代码语言:javascript
复制
@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;
}
票数 28
EN

Stack Overflow用户

发布于 2017-11-24 13:46:47

要完成,这里是kotlin变体:

代码语言:javascript
复制
    val binding = convertView?.tag as? CheckBinding ?: CheckBinding.inflate(layoutInflater, parent, false)
    binding.check = this.getItem(position)
    binding.root.tag = binding

    return binding.root
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33943717

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档