首页 文章

导航架构组件缓存webview内容

提问于
浏览
0

我通过 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" +
                ......

}

我的问题:每当我点击工具栏中的 Map 图标时, mNavController.navigate(R.id.action_global_mapFragment); 调用并且每次创建新的MapFragment,并且每次加载重量级的html数据 .

我怎么能缓存它?我无法在 onPause 中存储webview状态,因为每次都会重新创建片段 . 我可以设置 NavigationController 以避免这种情况吗?

或任何其他解决方案可能?

1 回答

  • 1

    Navigate方法总是创建一个新的fragment实例,你可以尝试使用web缓存:

    mWvMap.setAppCacheEnabled(true); 
    mWvMap.setAppCachePath(getBaseContext().getCacheDir().getPath());
    

相关问题