qmui registerEffect 替换startFragmentForResult
时间: 2023-07-06 07:34:15 浏览: 148
很抱歉,我之前的回答有误。QMUI 的 registerEffect 方法并不能替换 startFragmentForResult 方法,这两者是不同的功能。
registerEffect 方法是在 QMUIFragment 的生命周期中注册一些回调函数,以便在 Fragment 生命周期的不同阶段执行一些特定的操作。
而 startFragmentForResult 方法是启动一个新的 Fragment,并等待该 Fragment 返回结果。这个方法在 Android SDK 1.0 版本就已经存在,可以用于在 Fragment 之间进行数据交互。
在最新的 Android SDK 版本中,startFragmentForResult 方法已被弃用,取而代之的是使用 registerForActivityResult 方法。registerForActivityResult 方法可以注册一个 ActivityResultCallback,当目标 Fragment 结束后,可以通过回调函数接收返回结果。
如果您需要在 QMUIFragment 中启动一个新的 Fragment 并等待返回结果,可以使用 getParentFragmentManager().setFragmentResultListener 方法注册一个回调函数,等待子 Fragment 返回结果,并在回调函数中处理返回结果。例如:
```java
public class MyFragment extends QMUIFragment {
@Override
protected int getLayoutId() {
return R.layout.fragment_my;
}
@Override
protected void initView() {
// 初始化视图
}
@Override
protected void initData() {
// 初始化数据
}
@Override
public void onResume() {
super.onResume();
getParentFragmentManager().setFragmentResultListener("request_key", this, (requestKey, result) -> {
// 处理返回结果
});
}
@Override
public void onPause() {
super.onPause();
getParentFragmentManager().setFragmentResultListener("request_key", null, null);
}
private void startChildFragment() {
// 启动子 Fragment
MyChildFragment fragment = new MyChildFragment();
getParentFragmentManager().beginTransaction()
.add(R.id.container, fragment)
.commit();
}
}
```
在上面的示例中,我们在 onResume 方法中注册了一个回调函数,等待子 Fragment 返回结果。在 onPause 方法中注销这个回调函数,避免内存泄漏。在 startChildFragment 方法中启动子 Fragment,并将返回结果通过 setFragmentResult 方法返回。在回调函数中处理返回结果。
注意,这里的 request_key 是一个唯一标识符,用于区分不同的请求。在子 Fragment 中,需要通过 getParentFragmentManager().setFragmentResult 方法设置返回结果,并指定相同的 request_key。
阅读全文