java - 如何在方向更改的片段中保存 Web 视图状态?
问题描述
我使用 Java 中的 ViewModel 将 Web 视图状态保存在片段中。这样:
public class PageViewModel extends ViewModel {
private MutableLiveData<CustomWebView> liveData = new MutableLiveData<>();
public void setWebView(CustomWebView webView) {
liveData.setValue(webView);
}
public LiveData<CustomWebView> getWebView() {
return liveData;
}
}
在Fragment 中的onCreate并保存当前的 web-view 状态:
pageViewModel = new ViewModelProvider(this).get(PageViewModel.class);
pageViewModel.setWebView((CustomWebView) view);
最后在 Fragment 中的 onConfigurationChanged 中:
@Override
public void onConfigurationChanged(@NonNull Configuration newConfig) {
super.onConfigurationChanged(newConfig);
pageViewModel.getWebView().observe(requireActivity(), new Observer<CustomWebView>() {
@Override
public void onChanged(CustomWebView customWebView) {
webView = customWebView;
}
});
}
因此,当方向改变时,网络视图不会重新加载。但是当我在 kotlin 中使用这种方式时,Webview 不保存状态并重新加载。
页面视图模型:
class PageViewModel : ViewModel() {
val liveData = MutableLiveData<CustomWebView>()
fun setWebView(webView: CustomWebView?) {
liveData.value = webView
}
fun getWebView(): LiveData<CustomWebView?>? {
return liveData
}
}
在全局变量中:private lateinit var pageViewModel: PageViewModel
和片段的 onCreate 方法中:
pageViewModel = ViewModelProvider(activity!!).get(PageViewModel::class.java)
pageViewModel.setWebView(view as CustomWebView)
最后在 Fragment 中的 onConfigurationChanged 中:
pageViewModel.getWebView()?.observe(requireActivity(), Observer { customWebView ->
if (customWebView != null) {
webView = customWebView
}
})
你能帮助我吗?我哪里做错了?
解决方案
你的方法很好,效果很好。我测试了您的代码,但在我的应用程序中,onConfigurationChanged没有运行。我搜索了这个问题并将这一行添加到清单中的活动标记中:
android:configChanges="orientation|screenSize"
然后 * onConfigurationChanged * 运行。
推荐阅读
- vaadin - Vaadin 14 纸滑针属性
- flutter - 如何使用颤振块设置本地状态
- azure-devops - Azure DevOps 测试计划
- react-native - React Native 中的 useState 获取先前状态的数据
- git - 在 git 中重新进行还原合并的正确方法是什么?
- javascript - firebase 函数默认项目中未使用 index.html 提供的外部文件
- python - 如何使用 Python 2.7 (2.7.16) 将较新版本的 python (2.7.18) 集成到 Anaconda 版本 2019.10?
- python - 在 RDS 上从 EMR pyspark 执行 sql 查询
- ios - 使用裁剪从 CVImageBuffer 创建 MTLTexture
- javascript - 如何在不点击的情况下在 Ionic 中实现滑动离子项目?