切换片段时保存片段状态

时间:2014-02-20 10:25:23

标签: android android-fragments android-webview

我正在开发一个相对简单的Android应用,它有一个主要的Activity和7个片段,当用户切换标签时会切换它们。其中一个选项卡是一个WebView,它只是在Fragment中加载一个Twitter页面。因为它必须加载URL,这需要大约3-4秒才能完成,并且我不想让用户每次加载此选项卡时都这样做并切换出来并返回到它,这就是现在发生了。 理想情况下,我喜欢在用户第一次加载页面后,每次都需要重新加载页面。

以下是webView片段的代码。

public class TwitterFragment extends Fragment {

    WebView webView;
    private static final String URL = "https://twitter.com/";

    public TwitterFragment() {};

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {

        View rootView = inflater.inflate(R.layout.fragment_twitter, container, false);
        webView = (WebView) rootView.findViewById(R.id.webView);
        webView.getSettings().setJavaScriptEnabled(true);
        webView.setWebViewClient(new WebViewClient());
        webView.loadUrl(URL);


        return rootView;
    }

    @Override
    public void onResume() {
        super.onResume();
    }

根据this SO link,您无法在每次调用时停止onCreateView,这意味着每次恢复片段时都必须加载URL。

有没有人知道我每次都可以绕过这种不必要的URL加载方式?

1 个答案:

答案 0 :(得分:0)

如果您将片段放在ViewPager内,那么您可以使用方法setOffscreenPageLimit来保留屏幕外片段的状态。

任何方式你仍然应该在某处保存你的推特数据,你可以直接将json写入你的应用数据文件,例如将此文件路径与时间戳一起存储在sharedmemory中。如果时间戳太旧,那么您将检索新数据。您将在旋转设备屏幕时需要它,在配置更改期间,android将调用Fragment.onSaveInstanceState。我想保存这个文件可以解决你所有的问题。

[编辑]抱歉,现在我看到你正在加载webl上的网址 - 而不是直接下载。

[edit2]这似乎给你的问题提出了类似的问题:WebView reloading when Fragment in ViewPager is retained form BackStack,解决方案是使用ViewPager和setOffscreenPageLimit