gpt4 book ai didi

android - 保存 fragment 的状态?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:51:38 28 4
gpt4 key购买 nike

我有一个 fragment 类。如下所示:

public class FragmentA extends Fragment {

Button button;
WebView myWebView;
int mCurCheckPosition;

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

}

@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putInt("curChoice", mCurCheckPosition);
}

@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
if (savedInstanceState != null) {
// Restore last state for checked position.
mCurCheckPosition = savedInstanceState.getInt("curChoice", 0);
}
}



@Override
public View onCreateView(LayoutInflater inflater, ViewGroup group, Bundle saved)
{
View mainView = (View) inflater.inflate(R.layout.frag_a, group, false);
myWebView = (WebView) mainView.findViewById(R.id.webview);
myWebView.setWebViewClient(new MyWebViewClient());
myWebView.getSettings().setPluginsEnabled(true);
myWebView.getSettings().setBuiltInZoomControls(false);
myWebView.getSettings().setSupportZoom(false);
myWebView.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);
myWebView.getSettings().setAllowFileAccess(true);
myWebView.getSettings().setDomStorageEnabled(true);
myWebView.loadUrl("http://www.bbc.co.uk");
return mainView;
}


public class MyWebViewClient extends WebViewClient {
/* (non-Java doc)
* @see android.webkit.WebViewClient#shouldOverrideUrlLoading(android.webkit.WebView, java.lang.String)
*/


@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
if (url.endsWith(".mp4"))
{
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(Uri.parse(url), "video/*");

view.getContext().startActivity(intent);
return true;
}
else {
return super.shouldOverrideUrlLoading(view, url);
}
}

}

问题是当我在另一个 fragment 之间移动时,原始 fragment 的状态(它所在的网页)丢失了。

我该如何防止这种情况发生?我希望网页的状态保持在每个 fragment 之间切换。

谢谢

最佳答案

你应该使用 WebView.saveState(Bundle state)方法添加到 onSaveInstanceState(Bundle outState) 方法中,然后使用 WebView.restoreState(Bundle state) 恢复状态在你的 onActivityCreated(Bundle savedInstanceState) 方法中

@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
mWebView.saveState(outState);
}

@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
mWebView.restoreState(savedInstanceState);
}

还要记住 fragment 生命周期。如果您不确定在哪里恢复状态(onCreate、onCreateView、onActivityCreated),请查看 Fragment Lifecycle 文档以找出正确的位置。 http://developer.android.com/guide/components/fragments.html

enter image description here

onCreate()

系统在创建 fragment 时调用它。在您的实现中,您应该初始化要在 fragment 暂停或停止时保留的 fragment 的基本组件,然后恢复。

onCreateView()

当 fragment 第一次绘制其用户界面时,系统会调用它。要为您的 fragment 绘制 UI,您必须从此方法返回一个作为 fragment 布局根的 View 。如果 fragment 不提供 UI,您可以返回 null。

onActivityCreated()

在创建 fragment 的 Activity 并且实例化该 fragment 的 View 层次结构时调用。一旦这些部分到位,它就可以用于进行最终初始化,例如检索 View 或恢复状态。它对于使用 setRetainInstance(boolean) 保留其实例的 fragment 也很有用,因为此回调会告诉 fragment 何时与新 Activity 实例完全关联。这是在 onCreateView(LayoutInflater, ViewGroup, Bundle) 之后和 onStart() 之前调用的。

关于android - 保存 fragment 的状态?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11798620/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com