我通过Navigation Architecture Component
https://developer.android.com/topic/libraries/architecture/navigation/
我有一个MainActivity
并在其中切换片段。
public class MainActivity extends AppCompatActivity {
NavController mNavController;
@Override
protected void onCreate(Bundle savedInstanceState) {
.....
Navigation.findNavController(this, R.id.my_nav_host_fragment);
.....
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch(item.getItemId()) {
case R.id.map: {
mNavController.navigate(R.id.action_global_mapFragment);
break;
}
}
return super.onOptionsItemSelected(item);
}
}
在MapFragment中,我有类似的内容(使用iframe加载html):
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
......
mWvMap.setWebChromeClient(new WebChromeClient());
....
mWvMap.loadData("<html>\n" +
"<head>\n" +
"</head>\n" +
"<body style=\"margin: 0\">\n" +
......
}
我的问题:每次我单击工具栏中的地图图标时,都会调用mNavController.navigate(R.id.action_global_mapFragment);
,每次创建新的MapFragment,以及每次加载重量级html数据。
如何缓存它?
我无法将Webview状态存储在onPause
中,因为每次都会重新创建片段。
我可以设置NavigationController
来避免这种情况吗?
或其他任何可行的解决方案?
答案 0 :(得分:1)
Navigate方法始终创建一个片段的新实例,您可以尝试使用Web缓存:
mWvMap.setAppCacheEnabled(true);
mWvMap.setAppCachePath(getBaseContext().getCacheDir().getPath());