Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/193.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 避免/防止在更改选项卡时刷新片段_Java_Android_Tabs_Fragment_Android Fragmentactivity - Fatal编程技术网

Java 避免/防止在更改选项卡时刷新片段

Java 避免/防止在更改选项卡时刷新片段,java,android,tabs,fragment,android-fragmentactivity,Java,Android,Tabs,Fragment,Android Fragmentactivity,我知道有很多关于这个主题的问题,但我不能让它在我的申请工作。我的问题是。我有一个有4个标签的应用程序。其中3个站点中有一个webView。每次我更改选项卡时,整个片段都会重新加载。我想让它再装一次。因此,当我失去互联网连接时,它仍会显示打开的页面 这是我的主要活动: public class MainActivity extends FragmentActivity { private FragmentTabHost TabHost; @Override protected void onC

我知道有很多关于这个主题的问题,但我不能让它在我的申请工作。我的问题是。我有一个有4个标签的应用程序。其中3个站点中有一个
webView
。每次我更改选项卡时,整个
片段都会重新加载。我想让它再装一次。因此,当我失去互联网连接时,它仍会显示打开的页面

这是我的主要活动:

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);
}
这是我的表1:

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

我尝试了很多东西。。。请帮忙。

我知道这是一个疯狂的解决方案,但是如果你想给用户“最后查看HTML”,也许你应该考虑缓存成功下载的HTML,然后如果下载再次失败,那么将这个HTML设置回WebVIEW?
防止重新加载可能更好,但如果找不到任何其他内容,请查看此链接以了解如何复制下载的HTML:

如果希望只加载一次数据(更改选项卡时不受影响),可以在
onAttach()中加载数据
在将片段附加到活动时只调用一次。@Mahm00d我怀疑onAttach()是否有效。在onCreate()和onCreateView()之前调用On attach。因此大多数视图项都不会运行。@KennyWest,你说得对。虽然视图独立逻辑可以在onAttach()中完成,但正如我再次查看他的代码时所述,对于webview,这里的onAttach()将不是一个解决方案。谢谢你指出这一点。