gpt4 book ai didi

android - fragment 旋转后如何不第二次调用 subscribe() 主体?

转载 作者:行者123 更新时间:2023-11-29 02:28:55 25 4
gpt4 key购买 nike

我有一个 Fragment,其中包含 Presenter

每次当用户将应用程序移动到后台,或挂起\恢复手机时,我在 Presenter 中的逻辑会自动调用,因为我在 onResume 中分离和附加演示者()onPause() 方法使 Presenter 在用户不与屏幕交互时进入休眠状态。问题是:是否可以重新订阅 Observable,但不要第一次调用 subscribe() 主体?因为现在每次旋转设备时我都会看到加载指示器,然后我不想看到它。

伪代码:

fragment :

@Override
public void onResume() {
super.onResume();
graphPresenter.attach(this);
}

@Override
public void onPause() {
super.onPause();
graphPresenter.detach(this);
}

主持人:

@Override
protected void onAttach(View view) {

final Observable<Data> dataObservable =
dataRepository.getDataIdentifier()
.switchMap(id -> {

//this calls each time on rotation =(

view.showDataLoading();
return repository.loadData(id);
});

dataObservable.subscribe(data -> {
view.showData(data);
view.hideDataLoading();
});
}

我的数据加载不那么频繁,所以我不想看到加载指示器。只想在旋转后立即查看旧数据。

附言我尝试设置 setRetainInstance(true) 但没有帮助。

最佳答案

方法 setRetainInstance 用于其他目标 - 它用于在 Activity 重新创建(配置更改时)之间保存 fragment 实例。

在您的情况下,最好的方法可能是在演示者中创建标志,这表示数据已加载:

@Override
public void onAttach(View view) {
if (!isDataLoaded) {
dataRepository.getData()
.doOnSubscribe(d -> view.showLoading(true))
.doAfterTerminate(d -> view.showLoading(false))
.doOnSuccess(d -> isDataLoaded = true)
.subscribe(view::showData, Throwable::printStackTrace);
}
}

此外,您可以不在 onResume 中调用 attach 方法,而是在 onCreate 中调用,据我所知,这不会导致错误。

关于android - fragment 旋转后如何不第二次调用 subscribe() 主体?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50703382/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com