Databinding在各种场景下拿到binding对象
来源:互联网 发布:c语言编程题目及答案 编辑:程序博客网 时间:2024/06/14 14:18
1、MyDataBindingActivity
ps:拿到binding的方式如下
activityMyDataBindingBinding = DataBindingUtil.setContentView(this, R.layout.activity_my_data_binding);
public class MyDataBindingActivity extends BaseActivity { private MyDataBindingViewModel vModel; private ActivityMyDataBindingBinding activityMyDataBindingBinding; private MyDataBindingAdapter adapter; private List<String> list = new ArrayList<>(); @Override protected void onCreate(@Nullable Bundle savedInstanceState) { activityMyDataBindingBinding = DataBindingUtil.setContentView(this, R.layout.activity_my_data_binding); super.onCreate(savedInstanceState);//布局文件中必须有data标签,data标签里可以毛都没有,所以下面两行不需要的时候可以不写 //vModel = new MyDataBindingViewModel(this); //activityMyDataBindingBinding.setVmodel(vModel); initView(); registerListner(); initData(); } private void initData() { for (int i = 0; i < 30; i++) { list.add("test databinding" + i); } adapter.notifyDataSetChanged(); } private void registerListner() { } private void initView() { activityMyDataBindingBinding.activityMyDataRv.setLayoutManager(new LinearLayoutManager(this)); adapter = new MyDataBindingAdapter(this, list); activityMyDataBindingBinding.activityMyDataRv.setAdapter(adapter); }}
布局activity_my_data_binding
ps:layout标签下不要有宽高等属性,data标签必须有,但是内部可以毛都没有
<?xml version="1.0" encoding="utf-8"?><layout xmlns:android="http://schemas.android.com/apk/res/android"> <data> </data> <RelativeLayout android:layout_width="match_parent" android:layout_height="match_parent"> <android.support.v7.widget.RecyclerView android:id="@+id/activity_my_data_rv" android:layout_width="match_parent" android:layout_height="match_parent"> </android.support.v7.widget.RecyclerView> </RelativeLayout></layout>
2、MyDataBindingAdapter
ps:拿到binding的方式如下
ItemMyDataBinding binding = DataBindingUtil.inflate(LayoutInflater.from(parent.getContext()), R.layout.item_my_data, parent, false);
public class MyDataBindingAdapter extends RecyclerView.Adapter<MyDataBindingAdapter.MyViewHolder> { private Context mContext; private List<String> mList = new ArrayList<>(); public MyDataBindingAdapter(Context context, List<String> list) { mContext = context; mList = list; } @Override public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { ItemMyDataBinding binding = DataBindingUtil.inflate(LayoutInflater.from(parent.getContext()), R.layout.item_my_data, parent, false); return new MyViewHolder(binding); } @Override public void onBindViewHolder(MyViewHolder holder, int position) { holder.bindData(mList.get(position)); } @Override public int getItemCount() { return mList.size(); } public static class MyViewHolder extends RecyclerView.ViewHolder { private ItemMyDataBinding binding; public MyViewHolder(ItemMyDataBinding binding) { super(binding.getRoot()); this.binding = binding; } public ItemMyDataBinding getBinding() { return binding; } public void bindData(String s) { //可以直接使用binding拿到view来操作 binding.itemMyDataTvName.setText(s); //也可以使用databinding的优势特征,view随data变化,如下两行 //binding.setVariable(BR.vmoduels, model); //binding.executePendingBindings(); } }}
布局item_my_data
<?xml version="1.0" encoding="utf-8"?><layout xmlns:android="http://schemas.android.com/apk/res/android"> <data> </data> <RelativeLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center"> <TextView android:id="@+id/item_my_data_tv_name" android:layout_width="match_parent" android:layout_height="40dp" android:gravity="center" android:textColor="#ce0000" android:textSize="15sp" /> </RelativeLayout></layout>
3、自定义view中拿到databinding对象
public class HomeCommunityFocusHeaderview extends FrameLayout { private Context mContext; private HeaderviewHomepageFocusBinding binding; private List<String> mList = new ArrayList<>(); public HomeCommunityFocusHeaderview(@NonNull Context context) { this(context, null); } public HomeCommunityFocusHeaderview(@NonNull Context context, @Nullable AttributeSet attrs) { this(context, attrs, 0); } public HomeCommunityFocusHeaderview(@NonNull Context context, @Nullable AttributeSet attrs, @AttrRes int defStyleAttr) { super(context, attrs, defStyleAttr); mContext = context; View mainView = LayoutInflater.from(context).inflate(R.layout.headerview_homepage_focus, null); //就是下面这句 binding = DataBindingUtil.bind(mainView); initView(); registerLitener(); initData(); addView(mainView); } }
参考:
http://www.jishux.com/plus/view-628623-1.html
http://blog.csdn.net/bin622/article/details/72870328
http://blog.csdn.net/l631768226/article/details/53692330
阅读全文
0 0
- Databinding在各种场景下拿到binding对象
- Silverlight DataBinding Converter:根据binding对象调整显示
- Silverlight DataBinding Converter:根据binding对象调整显示
- 在各种不同的浏览器环境下获取xmlhttp对象
- selenium中各种场景下启动Firefox
- Binding下
- android 打造在任意时刻都可以拿到Context对象
- Kotlin下配置DataBinding
- 各种程序场景下磁盘读写性能分析 -- 结合iostat
- 在什么场景下使用MVC框架?
- lua在mac下环境场景搭建
- 程序包databinding不存在的各种坑。
- 通过cewolf拿到JFreeChart对象
- 在Netbeans中使用DataBinding
- DataBinding
- DataBinding
- DataBinding
- DataBinding
- RxWX使用教程
- mysql主从复制
- oracle数据库常用的99条查询语句
- 算法导论:开放寻址
- iOS编程基础-OC(九)-专家级技巧:使用运行时系统API
- Databinding在各种场景下拿到binding对象
- 神经网络与深度学习(序)
- C++的基础知识(十五)--Sizeof与Strlen的区别与联系
- cpu之top_tb
- 从0开始学习 GitHub 系列之「07.GitHub 常见的几种操作」
- SVM相关知识点
- ElasticSearch的 Query DSL 和 Filter DSL
- Android YUV
- [Python]