【问题标题】:Save Fragment state when switching fragments切换 Fragment 时保存 Fragment 状态
【发布时间】:2014-02-20 10:25:22
【问题描述】:

我正在开发一个相对简单的 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 加载的方法?

【问题讨论】:

  • 那就不要使用onResume(),当你想恢复的时候加上一些条件。

标签: android android-fragments android-webview


【解决方案1】:

如果你把你的片段放在ViewPager 中,那么你就有一个方法setOffscreenPageLimit 允许你保留屏幕外片段的状态。

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

[edit] 抱歉,现在我看到您正在通过 webview 加载 url - 不是直接下载它。

[edit2] 这个 SO 似乎与您的问题类似:WebView reloading when Fragment in ViewPager is retained form BackStack,解决方案是使用 ViewPager 和 setOffscreenPageLimit

【讨论】:

    猜你喜欢
    • 2013-12-06
    • 2011-10-13
    • 1970-01-01
    • 1970-01-01
    • 2016-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多