gpt4 book ai didi

android - 更改 fragment 和保存 web View 状态 - 发疯

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:05:58 26 4
gpt4 key购买 nike

我在一周的大部分时间里都在尝试这样做,但仍然没有成功。

我有一个带有选项卡的操作栏(操作栏 sherlock),我可以在选项卡之间切换并更改 fragment 。

每个 fragment 都有一个 webview,我试图保存 webview 的状态,以便网页保持在用户离开时所在的同一页面上。

这是我的 fragment 代码:

public class FragmentB extends SherlockFragment {

WebView myWebView;

@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
myWebView.saveState(outState);
Log.w("///////", "onSaveInstanceState");

}

@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
myWebView.restoreState(savedInstanceState);
Log.w("///////", "onActivityCreated");

}

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.w("///////", "onCreate");
}

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

View mainView = (View) inflater.inflate(R.layout.frag_b, container, false);
myWebView = (WebView) mainView.findViewById(R.id.webview);


Log.w("///////", "onCreateView");


if (savedInstanceState != null){

myWebView.restoreState(savedInstanceState);
Log.w("///////", "restore!");
}
else{
Log.w("///////", "ELSE!");
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.google.com");
}



//return inflater.inflate(R.layout.frag_b, container, false);
return mainView;
}

public class MyWebViewClient extends WebViewClient {

@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 的onSaveInstanceState方法只有在父activity需要保存它的状态时才会被调用;这方面的一个例子是当父 Activity 在方向更改期间被销毁/重新创建时。因此,当您只是替换 fragment 或在它们之间切换为选项卡时,不会调用此方法。

作为针对您的特定情况的解决方法,您可以在 onPause 方法中将 webview 的状态保存在一个包中,并在 onActivityCreated 方法中恢复它:

    // Instance fields        
private WebView webView;
private Bundle webViewBundle;

/**
* Save the state of the webview
*/
@Override
public void onPause()
{
super.onPause();

webViewBundle = new Bundle();
webView.saveState(webViewBundle);
}

/**
* Restore the state of the webview
*/
@Override
public void onActivityCreated(Bundle savedInstanceState)
{
super.onActivityCreated(savedInstanceState);

if (webViewBundle != null)
{
webView.restoreState(webViewBundle);
}
}

有关更多信息,请参见此处:

How to save the state of a WebView inside a Fragment of an Action Bar

关于android - 更改 fragment 和保存 web View 状态 - 发疯,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11830050/

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