RxBinding基本使用

来源:互联网 发布:淘宝店铺如何进货 编辑:程序博客网 时间:2024/06/04 00:22

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