当前位置: 代码迷 >> 综合 >> RxBinding基本使用
  详细解决方案

RxBinding基本使用

热度:33   发布时间:2023-10-15 10:18:54.0

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>() {@Overridepublic 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_FLINGLog.i(TAG, event.scrollState() + "--state");}});RxAdapterView.itemClicks(mListView).subscribe(integer -> Log.i(TAG, integer + ""));RxAdapterView.itemClickEvents(mListView).subscribe(new Action1<AdapterViewItemClickEvent>() {@Overridepublic void call(AdapterViewItemClickEvent event) {//返回的是positionLog.i(TAG, event.position() + "");}});RxAdapterView.itemLongClicks(mListView).subscribe(position -> Log.i(TAG, position + ""));RxRadioGroup.checkedChanges(((RadioGroup) findViewById(R.id.rg))).subscribe(new Action1<Integer>() {@Overridepublic 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,会一直蹦显示角标越界。

  相关解决方案