导航体系结构组件缓存Webview内容

时间:2018-12-04 14:41:41

标签: android android-architecture-navigation

我通过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来避免这种情况吗?

或其他任何可行的解决方案?

1 个答案:

答案 0 :(得分:1)

Navigate方法始终创建一个片段的新实例,您可以尝试使用Web缓存:

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