android databinding RecyclerView / ListView

来源:互联网 发布:js eval函数 json 编辑:程序博客网 时间:2024/05/16 19:10

databinding 入门

https://academy.realm.io/cn/posts/data-binding-android-boyar-mount/
https://github.com/LyndonChin/MasteringAndroidDataBinding


recyclerview

RecyclerView.Adapter使用DataBinding
https://yanlu.me/android-databinding-tutorial-02/

以 RecyclerView 为例,Adapter 的 DataBinding 需要动态生成,
https://github.com/LyndonChin/MasteringAndroidDataBinding#dynamic-variables

极简的Android RecyclerView Adapter(使用DataBinding)
http://www.cnblogs.com/DoNetCoder/p/7243878.html

RecyclerView使用Android DataBinding( 英文)( 翻译后,代码不乱)
https://www.androidgig.com/recyclerview-with-android-databinding/

Android数据绑定:RecyclerView
减少,重复使用,重新绑定
https://medium.com/google-developers/android-data-binding-recyclerview-db7c40d9f0e4


listview

adapter代码

public class ReUseArrayAdapter<T> extends ArrayAdapter<T> {    protected Context mContext; // 上下文    protected LayoutInflater mLayoutInflater; // 布局解析    protected int mResource; // xml id    protected List<T> mList; // 数据集合    protected int mVariableId; // BR.xxx 例User    public ReUseArrayAdapter(@NonNull Context context, @LayoutRes int resource, int variableId) {        this(context, resource, new ArrayList<T>(), variableId);    }    public ReUseArrayAdapter(@NonNull Context context, @LayoutRes int resource,                             @NonNull List<T> objects, int variableId) {        super(context, resource, objects);        this.mContext = context;        this.mLayoutInflater = LayoutInflater.from(mContext);        this.mResource = resource;        this.mList = objects;        this.mVariableId = variableId;    }    @NonNull    @Override    public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {//        inflate生成View,然后DataBindingUtil.bind(itemView)创建DataBinding//                或者//        RecyclerItemViewBinding.inflate()生成DataBinding,然后binding.getRoot()得到View        @SuppressLint("ViewHolder") // 方式一        ViewDataBinding binding = DataBindingUtil.inflate(mLayoutInflater, mResource, parent, false);        binding.setVariable(mVariableId, mList.get(position));        binding.executePendingBindings();//      @SuppressLint("ViewHolder") // 方式二//      ViewDataBinding bind = DataBindingUtil.bind(mLayoutInflater.inflate(mResource, parent, false));//      bind.setVariable(mVariableId, mList.get(position));//      bind.executePendingBindings();        return binding.getRoot();    }}

使用示例

        mBinding = DataBindingUtil.setContentView(this, R.layout.activity_main);        ReUseArrayAdapter<UnsplashImg> adapter = new ReUseArrayAdapter<>(                MainActivity.this, R.layout.item_main_image, BR.beanImg);        mBinding.setAdapter(adapter);        // 网络请求, 获取数据之后        mBinding.getAdapter().addAll(unsplashImgList.subList(200, 300)); // 添加数据        mBinding.getAdapter().notifyDataSetChanged(); // 通知更新UI

标记

http://www.aspku.com/kaifa/android/204120.html
此网站databinding listview 写法, 非正确写法,
会导致图片错乱问题


end