Компонент веб-просмотра кэша архитектуры навигации

Я делаю навигацию в моем приложении через 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());
Другие вопросы по тегам