android - 在 RxJava 中链接对话 fragment 结果

标签 android rx-java rx-java2 android-dialogfragment dialogfragment

我们如何在 RxJava 链中链接对话 fragment 并等待其结果(单击哪个按钮)。

类似于:

buttonClickObservable.flatMap(v -> showDialogAndWaitForResponse()).subscribe(dialogResult -> doSomething());

这可能吗?请有人指导我。

谢谢。

最佳答案

如果您正在使用 RxBinding 库,您可以这样做:

buttonClickObservable
            .doOnNext(e -> showDialog())
            .flatMap(v -> dialogBtnClickObservable)
            .subscribe(clicked -> Log.d("TAG", "It's working!"));

编辑: 好的,事实证明使用 RxBinding 观察对话框的 View 并不是那么容易。所以,这是一个使用 RxBindingPublishSubject

的完整示例
public class MainActivity extends AppCompatActivity {
    Button btn;

    //here you can declare the Subject with the type
    //you're expecting as a result from the dialog
    public static final Subject<String> fragmentResultSubject = PublishSubject.create();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        btn = findViewById(R.id.btn);

        RxView.clicks(btn)
                .doOnNext(e -> showDialog())
                .flatMap(v -> fragmentResultSubject)
                .subscribe(fragmentResult -> Log.d("TAG", fragmentResult));
    }

    private MyDialogFragment showDialog() {
        MyDialogFragment myDialogFragment = new MyDialogFragment();
        myDialogFragment.show(getSupportFragmentManager(), "FRAG_TAG");

        return myDialogFragment;
    }


    public static class MyDialogFragment extends DialogFragment {
        Button dialogBtn;

        @Nullable
        @Override
        public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
            View rootView = inflater.inflate(R.layout.fragment_dialog, container, false);
            dialogBtn = rootView.findViewById(R.id.dialogBtn);
            dialogBtn.setOnClickListener(v -> fragmentResultSubject.onNext("Fragment btn clicked"));

            return rootView;
        }
    }
}

关于android - 在 RxJava 中链接对话 fragment 结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48902782/

相关文章:

android - 默认 android 布局的可见性/可访问性

java - Rxjava中如何在一个线程中处理Observable的所有事件,但在另一个线程中获取可用的最新值?

android - 无法查询使用 Realm

android - 相机 Intent 返回小图片

android - GPS 硬件要求和自定义下载链接

rx-java - 立即交付第一个项目, 'debounce' 后续项目

java - 如何解决此错误预期 BEGIN_ARRAY 但在第 1 行第 2 列路径 $ 处为 BEGIN_OBJECT

android - 使用 .just() 运算符时如何添加延迟

java - 取第一项,不完成

java - Android:下载文件并保存在SD卡上