2012-08-06 4 views
3

일주일 중 가장 좋은 부분을 위해이 작업을 시도했지만 여전히 행운이 없습니다.조각을 바꾸고 웹 뷰 상태를 저장하는 중 -

탭이있는 작업 표시 줄 (작업 표시 줄 sherlock)과 탭을 전환하고 조각을 잘 변경했습니다.

각 조각에는 webview가 있으며 웹보기가 사용자가 남긴 동일한 페이지에 머물도록 webview의 상태를 저장하려고합니다.

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); 
     } 
    } 

} 

} 어떤 도움이 좋을 것

:

여기 내 조각 코드입니다!

+0

누구나? 정말로 안드로이드에 지겹다. –

답변

2

단편의 onSaveInstanceState 메소드는 상위 활동이 상태를 저장할 필요가있을 때만 호출됩니다. 예를 들어 오리 엔테이션 변경 중에 상위 액티비티가 파괴/재 작성되는 경우입니다. 결과적으로이 메소드는 단편을 단순히 바꾸거나 탭으로 전환 할 때 호출되지 않습니다.

특정 경우에 대한 해결 방법으로, 당신은 onPause 방법에 번들에 웹보기의 상태를 저장하고 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

+0

나를 위해 일하지 않는다. – Dinesh

+0

setRetainInstance (true)가 정상적으로 작동합니다. 하지만 방향을 바꿀 때 다른 레이아웃을로드하고 있습니다. 달성하는 방법? – Dinesh

+1

이 경로로가는 모든 사람들에게 머리로 http://developer.android.com/reference/android/webkit/WebView.html#saveState(android.os.Bundle)'이 방법은 더 이상 디스플레이를 저장하지 않습니다. 이 WebView에 대한 데이터. 이전 동작으로 인해 restoreState (Bundle)가 호출되지 않으면 파일이 누출 될 수 있습니다 .' – qix

관련 문제