Компонент веб-просмотра кэша архитектуры навигации - PullRequest
0 голосов
/ 04 декабря 2018

Я делаю навигацию в моем приложении через 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 у меня есть что-то вродеthis (загрузить 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 Ответ

0 голосов
/ 05 декабря 2018

Метод навигации всегда создает новый экземпляр фрагмента, вы можете попробовать использовать веб-кеширование:

mWvMap.setAppCacheEnabled(true); 
mWvMap.setAppCachePath(getBaseContext().getCacheDir().getPath());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...