您的位置:首页 > 编程语言 > Java开发

RxBinding的使用,实现数据和View的绑定

2015-10-23 11:26 525 查看
rxbinding是一个开源项目,可以实现数据层与View层的绑定,当数据发生变化,View会自动更新UI。还有其他功能非常强大,github地址

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);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息