RxBinding基本使用

xiaoxiao2021-02-28  48

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,会一直蹦显示角标越界。

转载请注明原文地址: https://www.6miu.com/read-83729.html

最新回复(0)