2015-04-11 2 views
1

Я создал приложение, в котором у меня есть 3 вкладки для отображения веб-страниц с использованием фрагмента. Каждый раз, когда я переключаюсь на вкладку 2 со вкладки 1, а затем обратно на вкладку 1, вкладка 1 перезагружается. Я искал google и решения, которые я нашел, не сработали. До сих пор я попытался это:Как предотвратить перезагрузку страницы Webview

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

И это:

<activity ... 
     android:launchMode="singleInstance" 
    android:alwaysRetainTaskState="true"> 

Вот мой Основная деятельность

import android.annotation.TargetApi; 
import android.os.Build; 
import android.os.Bundle; 
import android.support.v4.view.ViewPager; 
import android.support.v7.app.ActionBarActivity; 
import android.support.v7.widget.Toolbar; 
import android.view.Menu; 
import android.view.MenuItem; 

import com.tech.slidechat.adaptor.SlidingTabLayout; 
import com.tech.slidechat.adaptor.TabsPagerAdapter; 

@TargetApi(Build.VERSION_CODES.HONEYCOMB) 
public class MainActivity extends ActionBarActivity { 
SlidingTabLayout tabs; 
ViewPager viewPager; 
TabsPagerAdapter adapter; 

Toolbar toolbar; 

CharSequence Titles[]={ "tab1", "tab2", "tab3" }; 
int Numboftabs =3; 

@TargetApi(Build.VERSION_CODES.ICE_CREAM_SANDWICH) 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    toolbar = (Toolbar) findViewById(R.id.tool_bar); 
    setSupportActionBar(toolbar); 

    adapter = new TabsPagerAdapter(getSupportFragmentManager(), Titles, Numboftabs); 
    // Assigning ViewPager View and setting the adapter 
    viewPager = (ViewPager) findViewById(R.id.pager); 
    viewPager.setAdapter(adapter); 
    // Assiging the Sliding Tab Layout View 
    tabs = (SlidingTabLayout) findViewById(R.id.tabs); 
    tabs.setDistributeEvenly(true); 
    tabs.setCustomTabColorizer(new SlidingTabLayout.TabColorizer() { 
     @Override 
     public int getIndicatorColor(int position) { 
      return getResources().getColor(R.color.tabsScrollColor); 
     } 

     @Override 
     public int getDividerColor(int i) { 
      return 0; 
     } 
    }); 

    tabs.setViewPager(viewPager); 
} 
@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    // Inflate the menu; this adds items to the action bar if it is present. 
    getMenuInflater().inflate(R.menu.menu_main, menu); 
    return true; 
} 

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    // Handle action bar item clicks here. The action bar will 
    // automatically handle clicks on the Home/Up button, so long 
    // as you specify a parent activity in AndroidManifest.xml. 
    int id = item.getItemId(); 

    //noinspection SimplifiableIfStatement 
    if (id == R.id.action_settings) { 
     return true; 
    } 

    return super.onOptionsItemSelected(item); 
} 
} 

И это одна из моих Webview Фрагменты:

import android.os.Bundle; 
    import android.support.v4.app.Fragment; 
    import android.view.KeyEvent; 
    import android.view.LayoutInflater; 
    import android.view.View; 
    import android.view.ViewGroup; 
    import android.webkit.WebChromeClient; 
    import android.webkit.WebView; 
    import android.webkit.WebViewClient; 
    import android.widget.ProgressBar; 

    public class GamesFragment extends Fragment { 

private ProgressBar progress; 


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

    View rootView = inflater.inflate(R.layout.fragment_games, container, false); 

    String url = "http://myurl.com"; 
    WebView myWebView = (WebView) rootView.findViewById(R.id.webViewGames); 
    myWebView.setWebChromeClient(new myWebViewClient()); 
    myWebView.getSettings().setJavaScriptEnabled(true); 
    progress = (ProgressBar) rootView.findViewById(R.id.progressBar); 
    progress.setMax(100); 
    myWebView.loadUrl(url); 


    myWebView.setWebViewClient(new WebViewClient() { 

     @Override 
     public boolean shouldOverrideUrlLoading(WebView View, String url) { 
      View.loadUrl(url); 
      GamesFragment.this.progress.setProgress(0); 
      return true; 
     } 
    }); 


    myWebView.setOnKeyListener(new android.view.View.OnKeyListener() 

    { 
     @Override 
     public boolean onKey(View v, int keyCode, KeyEvent event) { 
      if (event.getAction() == KeyEvent.ACTION_DOWN) { 
       WebView webView = (WebView) v; 

       switch (keyCode) { 
        case KeyEvent.KEYCODE_BACK: 
         if (webView.canGoBack()) { 
          webView.goBack(); 
          return true; 
         } 
         break; 
       } 
      } 

      return false; 
     } 
    }); 
    return rootView; 

} 


private class myWebViewClient extends WebChromeClient { 
    @Override 
    public void onProgressChanged(WebView view, int newProgress) { 
     GamesFragment.this.setValue(newProgress); 
     super.onProgressChanged(view, newProgress); 
    } 
} 

public void setValue(int progress) { 
    this.progress.setProgress(progress); 
} 


} 

Интересно, что всякий раз, когда я e Tab1 и Tab2 не перезагружаются, но когда я переключаюсь на Tab3, а затем возвращается к Tab1, тогда он перезагружается.

Любая помощь была бы глубоко оценена.

ответ

3

Можете ли вы пытались добавить:

viewPager.setOffscreenPageLimit(2); 

Согласно документации, setOffscreenPageLimit заключается в следующем:

Установите количество страниц, которые должны быть сохранены в обе стороны от текущей страницы в окне иерархии в незанятом состоянии. Страницы за пределами этого диапазона предел будет воссоздан из адаптера, если это необходимо.

...

Вы должны держать этот предел низким, особенно если ваши страницы имеют комплекс> макеты. Эта настройка по умолчанию равна 1.

По умолчанию 1, поэтому при переходе на вкладку 3 есть две вкладки слева от текущей вкладки, так что вкладка 1 воссоздается.

+0

Я не знаю, как сказать спасибо вам !!! Но спасибо! ТЫ ОБАЛДЕННЫЙ – Rahul

Смежные вопросы