1、RxBinding需要导入依赖:
compile 'com.jakewharton.rxbinding:rxbinding:0.4.0'
2、一些基本的写法在下面:
RxTextView:
/**
* textChangeEvents:
* 在你操作之后,
* event.count()返回的是刚刚输入了多少了,如果是删除了字节返回0
* event.start()返回的是在你刚刚输入之前,tv(et)的length,如果你是删除了字节就返回还剩多少个
* event.toString()返回的是一个TextViewTextChangeEvent{text=然后放, start=0, before=0, count=3, view=android.widget.EditText
{9e05f0d VFED..CL. .F...... 0,144-1080,744 #7f0b0061 app:id/et1}}
* event.text()返回的是目前tv(et).getText.toString
* event.before()如果你刚刚执行的是输入就返回0,执行的是删除就返回1
*/
RxTextView.textChangeEvents(((EditText) findViewById(R.id.et1)))
.debounce(500, TimeUnit.MILLISECONDS)
.subscribe(event -> Log.i(TAG, event.before() + ""));
/**
* afterTextChangeEvents:
* event.editable()返回的是tv(et).getText.toString
* event.toString() TextViewAfterTextChangeEvent{editable=放假就, view=android.widget
* .EditText{28c9ec2 VFED..CL. .F...... 0,144-1080,744 #7f0b0061 app:id/et1}}
* event.equals("你好") 不知道为啥我输入的是"你好"也返回的是false
*/
RxTextView.afterTextChangeEvents(((EditText) findViewById(R.id.et1)))
.debounce(500, TimeUnit.MILLISECONDS)
.subscribe(event -> Log.i(TAG, event.equals("你好") + ""));
/**
* beforeTextChangeEvents:
* event.after()返回的是你刚刚输入了多少个
* event.toString()还是一样
* event.text()返回的是你目前tv(et).getText.toString()
* event.start()返回的是你刚刚输入之前tv(et).length()
*event.count()你刚刚是输入返回0,是删除返回1
*/
RxTextView.beforeTextChangeEvents(((EditText) findViewById(R.id.et1)))
.debounce(500, TimeUnit.MILLISECONDS)
.subscribe(event -> Log.i(TAG, event.count() + ""));
/**
* beforeTextChangeEvents:
* event.after()返回的是你刚刚输入了多少个
* event.toString()还是一样
* event.text()返回的是你目前tv(et).getText.toString()
* event.start()返回的是你刚刚输入之前tv(et).length()
*event.count()你刚刚是输入返回0,是删除返回1
*/
RxTextView.beforeTextChangeEvents(((EditText) findViewById(R.id.et1)))
.debounce(500, TimeUnit.MILLISECONDS)
.take(10)
.subscribe(event -> Log.i(TAG, event.after() + event.start() + ""));
RxAbsListView.scrollEvents(mListView)
.subscribe(new Action1<AbsListViewScrollEvent>() {
@Override
public void call(AbsListViewScrollEvent event) {
Log.i(TAG, event.firstVisibleItem() + "--firstVisiblePosition");
Log.i(TAG, event.visibleItemCount() + "--visibleCount");
Log.i(TAG, event.totalItemCount() + "--total");
//0代表空闲SCROLL_STATE_IDLE
//1代表正在触摸滑动SCROLL_STATE_TOUCH_SCROLL
//2代表滚动状态SCROLL_STATE_FLING
Log.i(TAG, event.scrollState() + "--state");
}
});
RxAdapterView.itemClicks(mListView)
.subscribe(integer -> Log.i(TAG, integer + ""));
RxAdapterView.itemClickEvents(mListView)
.subscribe(new Action1<AdapterViewItemClickEvent>() {
@Override
public void call(AdapterViewItemClickEvent event) {
//返回的是position
Log.i(TAG, event.position() + "");
}
});
RxAdapterView.itemLongClicks(mListView)
.subscribe(position -> Log.i(TAG, position + ""));
RxRadioGroup.checkedChanges(((RadioGroup) findViewById(R.id.rg)))
.subscribe(new Action1<Integer>() {
@Override
public void call(Integer integer) {
//一个都没选输出的是-1
//从integer为1开始算
// RxCompoundButton.checkedChanges()跟这个是类似的
Log.i(TAG, integer + "");
}
});
RxRadioGroup示例“:
RxRadioGroup.checkedChanges(mRadioGroup)
.subscribe(position -> setRadioGroup(position));
((RadioButton) mRadioGroup.getChildAt(0)).setChecked(true);
private void setRadioGroup(int position) {
if (position == -1)
return;
FragmentManager fragmentManager = getSupportFragmentManager();
FragmentTransaction transaction = fragmentManager.beginTransaction();
Fragment fragment = fragmentList.get(position-1);
if (fragment.isAdded()) {
transaction.show(fragment);
} else {
transaction.add(R.id.main_fl, fragment);
visiableFragments.add(fragment);
}
for (Fragment fragment1 : visiableFragments) {
if (fragment1 != fragment) {
if (fragment1.isVisible()) {
transaction.hide(fragment1);
transaction.addToBackStack(null);
}
}
}
transaction.commit();
}
注意:如果用上面这种方法来使用radiogroup,那么radiogroup里面的radiobutton不要设置id,不然传递出来的position就不是从1开始然后输出位子,而是输出的resId,例如276545145,会一直蹦显示角标越界。