Компонент веб-просмотра кэша архитектуры навигации
Я делаю навигацию в моем приложении через 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 у меня есть что-то вроде этого (загрузить HTML с iframes):
@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-данные.
Как я могу кешировать это? Я не могу сохранить состояние веб-просмотра в onPause
, потому что фрагмент воссоздается каждый раз. Могу ли я настроить NavigationController
чтобы избежать этого?
Или любое другое решение возможно?
1 ответ
Метод Navigate всегда создает новый экземпляр фрагмента, вы можете попробовать использовать веб-кеширование:
mWvMap.setAppCacheEnabled(true);
mWvMap.setAppCachePath(getBaseContext().getCacheDir().getPath());