6

我有一个简单的活动,其中有一个导航抽屉。它的一个入口是一个WebView,它需要大量的加载(它显示Gmail,以便遵循所有这些令人讨厌的重定向需要很多)。如何防止从NavigationDrawer中选择片段重新创建?

即使发生不同的选择,我也想保留片段。我认为这些解决方案可能会起作用。他们没有。

1)不重新创建片段:即使mWebmailFragment 实际上不为空,onCreateView()被在任何情况下被调用。 2)如果调用了onCreateView(),则保留WebView对象状态可能会起作用。那么,它不:调试我发现savedInstanceState是总是为空。我不知道为什么。

public View onCreateView(LayoutInflater inflater, ViewGroup container, 
     Bundle savedInstanceState) { 
    super.onCreateView(inflater, container, savedInstanceState); 

    // Retain instance 
    setRetainInstance(true); 

    //.... 

    // SavedState 
    if (savedInstanceState != null) { 
      mWebView.restoreState(savedInstanceState); 
    } else { 
     // do stuff 
    } 
} 
@Override 
public void onSaveInstanceState(Bundle outState) { 
    super.onSaveInstanceState(outState); 
    mWebView.saveState(outState); 
} 
+0

当你选择另一个碎片时,你如何改变碎片?如果你“替换”它们,也许试试“show()”和“hide()”。 – Maximosaic

+0

你有没有找到解决方案? –

+0

不...我使用了“隐藏所有 - 显示选择”的逻辑,但是当方向改变发生时,所有东西都会混乱起来。就目前而言,我解决了在纵向模式下强制用户界面的问题,但是您可以了解它有多少限制。 – Gianluca

回答

0

我想你没有正确使用hide/Show。在你的片段事务中,使用add()来加载fragment而不是replace()。

更改此

final FragmentManager myFragmentManger = myContext 
        .getSupportFragmentManager(); 
      final FragmentTransaction myFragmentTransaction = myFragmentManger 
        .beginTransaction(); 
      myFragmentTransaction.replace(R.id.content, aFragment, 
        aFragmentTag.getFragment()); 

以片段的

final FragmentManager myFragmentManger = myContext 
        .getSupportFragmentManager(); 
      final FragmentTransaction myFragmentTransaction = myFragmentManger 
        .beginTransaction(); 
      myFragmentTransaction.add(R.id.content, aFragment, 
        aFragmentTag.getFragment()); 

如果使用替代,CreateView的()将被调用每次。尝试按照上面的代码使用add()。

相关问题