RxBinding的使用,实现数据和View的绑定
2015-10-23 11:26
525 查看
rxbinding是一个开源项目,可以实现数据层与View层的绑定,当数据发生变化,View会自动更新UI。还有其他功能非常强大,github地址
https://github.com/ogaclejapan/RxBinding
下面使用AndroidStudio写一个小例子,点击button让sharedpreferences中的内容发生改变,textview订阅到变化自动更新文本。效果很简单,如下图
![](https://img-blog.csdn.net/20151023110538183)
图怎么这么大,怎么改小= =
1、首先配置
在app的build.gradle中dependencies节点添加
compile ‘io.reactivex:rxjava:1.0.14’
compile ‘io.reactivex:rxandroid:1.0.1’
compile ‘com.ogaclejapan:rxbinding:1.2.0’
lambda表达式配置参考http://blog.csdn.net/forad/article/details/49100317
2、看代码
https://github.com/ogaclejapan/RxBinding
下面使用AndroidStudio写一个小例子,点击button让sharedpreferences中的内容发生改变,textview订阅到变化自动更新文本。效果很简单,如下图
图怎么这么大,怎么改小= =
1、首先配置
在app的build.gradle中dependencies节点添加
compile ‘io.reactivex:rxjava:1.0.14’
compile ‘io.reactivex:rxandroid:1.0.1’
compile ‘com.ogaclejapan:rxbinding:1.2.0’
lambda表达式配置参考http://blog.csdn.net/forad/article/details/49100317
2、看代码
package com.example.administrator.testrxbinding; import android.content.SharedPreferences; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.Menu; import android.view.MenuItem; import android.widget.Button; import android.widget.TextView; import com.ogaclejapan.rx.binding.Rx; import com.ogaclejapan.rx.binding.RxProperty; import com.ogaclejapan.rx.binding.RxView; import rx.Observable; public class MainActivity extends AppCompatActivity { private Button mBtn; private TextView mTv; //属性对象,封装了要观察的数据 private RxProperty<String> spContent = RxProperty.create(); private SharedPreferences mSP; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mBtn = (Button) findViewById(R.id.btn); mTv = (TextView) findViewById(R.id.tv1); mSP = this.getSharedPreferences("my_sharedpreference", MODE_PRIVATE); //给sp注册监听器 mSP.registerOnSharedPreferenceChangeListener(spListener); mSP.edit().putString("key", "我是原值").apply(); //点击button改变SharedPreferences中的值 mBtn.setOnClickListener(v -> { mSP.edit().putString("key", "我是改后的值").apply(); } ); //原始写法 /*RxView.of(mTv).bind(spContent, new Rx.Action<TextView, CharSequence>() { @Override public void call(TextView textView, CharSequence charSequence) { textView.setText(charSequence); } });*/ //使用RxView将需要绑定的View对象和属性对象进行绑定,当属性对象的内容(被观察者)发生变化 //观察者RxView,会观察到并自动更新UI RxView.of(mTv).bind(spContent, (v, content) -> { v.setText(content); }); } //原始写法 /*private SharedPreferences.OnSharedPreferenceChangeListener spListener = new SharedPreferences.OnSharedPreferenceChangeListener() { @Override public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) { spContent.set(sharedPreferences.getString(key, "")); } });*/ //使用lambda写法 private SharedPreferences.OnSharedPreferenceChangeListener spListener = (sp, key) -> { spContent.set(sp.getString(key, "")); }; @Override public void finish() { super.finish(); //记得取消注册 mSP.unregisterOnSharedPreferenceChangeListener(spListener); } }
相关文章推荐
- Ruby中使用Block、Proc、lambda实现闭包
- Ruby中的block、proc、lambda区别总结
- C#中观察者模式的3种实现方式
- 浅谈Nodejs观察者模式
- C++实现的一个可以写递归lambda的Y函数
- C#特性之匿名方法和Lambda表达式
- 理解C#中的Lambda表达式
- 初步认识C#中的Lambda表达式和匿名方法
- C#3.0中Lambda表达式详解
- C#基础之Lambda表达式用法实例教程
- C#设计模式之观察者模式实例讲解
- jQuery的观察者模式详解
- Android源码学习之观察者模式应用及优点介绍
- php设计模式之观察者模式的应用详解
- Python设计模式之观察者模式实例
- C#中委托和事件在观察者模式中的应用实例
- C++设计模式之观察者模式
- ruby、javascript、php中的观察者模式实现代码
- php中的观察者模式简单实例
- JavaScript设计模式之观察者模式(发布者-订阅者模式)