2013-10-10 23 views
4

我知道有很多关于此主题的问题,但无法在我的应用程序上使用它。我的问题是。我有一个带有4个选项卡的应用程序。其中3人有webView。每当我改变标签时,整个fragment只是重新加载。我希望它再次加载它。所以当我失去互联网连接时,它仍会显示已打开的页面。更改标签时避免/防止刷新片段

这是我mainactivity:

public class MainActivity extends FragmentActivity { 

private FragmentTabHost TabHost; 

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

    setContentView(R.layout.activity_main); 
    //instellingen laden 
    final SharedPreferences settings = getSharedPreferences("Leerling", 0); 

    //lln laden 
    int lln = settings.getInt("lln", 0); 
    if(lln == 0) { 

     //alert maken 
     AlertDialog.Builder alert = new AlertDialog.Builder(this); 
     alert.setTitle("Welkom"); 
     alert.setMessage("Vul je LLN in:"); 

     // EditText maken 
     final EditText input = new EditText(this); 
     input.setInputType(InputType.TYPE_CLASS_NUMBER); 
     alert.setView(input); 

     //ga knop 
     alert.setPositiveButton("Ga", new DialogInterface.OnClickListener() { 
      public void onClick(DialogInterface dialog, int whichButton) { 
       //String text = input.getEditableText().toString(); 
       int lln = Integer.parseInt(input.getEditableText().toString()); 
       SharedPreferences.Editor editor = settings.edit(); 
       editor.putInt("lln", lln); 
       editor.commit(); 
       } 
     }); 
     //stop knop 
     alert.setNegativeButton("Stop", new DialogInterface.OnClickListener() { 
      public void onClick(DialogInterface dialog, int whichButton) { 
       // Canceled. 
       android.os.Process.killProcess(android.os.Process.myPid()); 
       return; 
      } 
     }); 

     alert.show(); 
    } 

    TabHost = (FragmentTabHost)findViewById(android.R.id.tabhost); 
    TabHost.setup(this, getSupportFragmentManager(), R.id.realtabcontent); 

    //tab1 toevoegen 
    TabHost.addTab(TabHost.newTabSpec("tab1").setIndicator("Rooster"), Tab1.class, null); 

    //tab2 toevoegen 
    TabHost.addTab(TabHost.newTabSpec("tab2").setIndicator("Pers"), Tab2.class, null); 

    //tab3 toevoegen 
    TabHost.addTab(TabHost.newTabSpec("tab3").setIndicator("Wijzig"), Tab3.class, null); 

    //tab4 toevoegen 
    TabHost.addTab(TabHost.newTabSpec("tab4").setIndicator("Extra's"), Tab4.class, null); 
} 

这是我TAB1:

public class Tab1 extends Fragment { 

private Bundle webViewBundle; 
private WebView webViewRooster; 

@Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    // Inflate the layout for this fragment 
    View View = inflater.inflate(R.layout.activity_tab1, container, false); 

    SharedPreferences settings = getActivity().getSharedPreferences("Leerling", 0); 
    int lln = settings.getInt("lln", 0);   

    webViewRooster = (WebView) View.findViewById(R.id.webViewRooster);   
    webViewRooster.setWebViewClient(new WebViewClient()); 

    if (webViewBundle == null) { 
     Toast.makeText(getActivity(), "geladen voor eerste x", Toast.LENGTH_SHORT).show(); 
     webViewRooster.loadUrl("http://www.idylank.x90x.net/rooster.php?lln=" + lln); 
    } 
    else{ 
     Toast.makeText(getActivity(), "tweede of meer x", Toast.LENGTH_SHORT).show(); 
     //webViewRooster.restoreState(webViewBundle); 
    } 
    return View;   
} 
public void onPause() { 
    webViewBundle = new Bundle(); 
    webViewRooster.saveState(webViewBundle); 
    super.onPause(); 
} 

我尝试了很多东西...请帮助。

+0

如果您想对数据进行加载刚有一次(在改变标签的时候不会受到影响),你可以在onAttach()中加载它,这只是将片段附加到活动时调用的一次。 – Mahm00d

+0

@ Mahm00d我怀疑ontach()会起作用。在onCreate()和onCreateView()之前调用attach。因此大多数查看项目不会运行。 –

+0

@KennyWest,你是对的。尽管视图独立逻辑可以在onAttach()中完成,但是我再次查看他的代码时,对于webview,onAttach()将不是解决方案。感谢您指出。 – Mahm00d

回答

0

我知道这是一个疯狂的解决方法,但是如果你想给用户“上次查看的HTML”,也许你应该考虑缓存已成功下载的HTML,然后将该HTML重新设置为WebView,如果再次下载失败?

防止重装可能会更好,但如果你没有别的发现了什么,检查此链接找到如何利用下载的HTML的副本:how to get html content from a webview?