2017-10-01 3 views
0

J'utilise tab-layout avec 5 fragment. Et chaque fragment a webview avec un lien web unique. Le temps que je sélectionne l'onglet tout fonctionne bien. Mais quand je reviens sur le même onglet qui est terminé chargé avant de recharger à nouveau. Y at-il une raison pour laquelle je peux enregistrer le contenu dans le fragment de sorte que je dois charger le lien fragment une seule fois.charger webview une seule fois dans tablayout avec beaucoup de fragment

mon code

public class MainActivity extends AppCompatActivity { 
     TabLayout tabLayout; 
     ViewPager viewPager; 
     private int[] tabIcons = { 
       R.drawable.ic_tab_1, 
      R.drawable.ic_tab_2, 
      R.drawable.ic_tab_3, 
      R.drawable.ic_tab_4, 
      R.drawable.ic_tab_5, 
    }; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 

     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     viewPager = (ViewPager) findViewById(R.id.viewpager); 
     setupViewPager(viewPager); 
     tabLayout = (TabLayout) findViewById(R.id.tabs); 
     tabLayout.setupWithViewPager(viewPager); 
     setupTabIcons(); 
    } 

    private void setupViewPager(ViewPager viewPager) { 
     ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager()); 
     adapter.addFragment(new Fragment1(),"1"); 
     adapter.addFragment(new Fragment2(), "2"); 
     adapter.addFragment(new Fragment3(),"3"); 
     adapter.addFragment(new Fragment4(), "4"); 
     adapter.addFragment(new Fragment5(), "5"); 
     viewPager.setAdapter(adapter); 
    } 

    private void setupTabIcons() { 
     tabLayout.getTabAt(0).setIcon(tabIcons[0]); 
     tabLayout.getTabAt(1).setIcon(tabIcons[1]); 
     tabLayout.getTabAt(2).setIcon(tabIcons[2]); 
     tabLayout.getTabAt(3).setIcon(tabIcons[3]); 
     tabLayout.getTabAt(4).setIcon(tabIcons[4]); 
    } 

    class ViewPagerAdapter extends FragmentPagerAdapter { 
     private final List<Fragment> mFragmentList = new ArrayList<>(); 
     private final List<String> mFragmentTitleList = new ArrayList<>(); 

     public ViewPagerAdapter(FragmentManager manager) { 
      super(manager); 
     } 

     @Override 
     public Fragment getItem(int position) { 
      return mFragmentList.get(position); 
     } 

     @Override 
     public int getCount() { 
      return mFragmentList.size(); 
     } 

     public void addFragment(Fragment fragment, String title) { 
      mFragmentList.add(fragment); 
      mFragmentTitleList.add(title); 
     } 

     @Override 
     public CharSequence getPageTitle(int position) { 
      return null; 
     } 
    } 
} 

fragmenter est

public class Fragment1 extends Fragment { 
    WebView web; 
    private SmoothProgressBar mProgressBar; 
    private SwipeRefreshLayout mySwipeRefreshLayout; 

    public View onCreateView(LayoutInflater inflater, ViewGroup viewGroup, Bundle saveInstanceState) { 
     View view = inflater.inflate(R.layout.fragment_1, viewGroup, false); 
     web = (WebView) view.findViewById(R.id.id_web); 
     mProgressBar = (SmoothProgressBar)view.findViewById(R.id.google_now); 

     mySwipeRefreshLayout = (SwipeRefreshLayout)view.findViewById(R.id.swipeContainer); 
     mySwipeRefreshLayout.setOnRefreshListener(
       new SwipeRefreshLayout.OnRefreshListener() { 
        @Override 
        public void onRefresh() { 
         web.reload(); 
        } 
       } 
     ); 
     loadingThePage(); 
     return view; 
    } 
    private void loadingThePage(){ 
     web.setWebViewClient(new myWebClient()); 
     web.getSettings().setJavaScriptEnabled(true); 
     web.getSettings().setAppCacheEnabled(true); 
     web.loadUrl("https://www.google.com/"); 
    } 


    public class myWebClient extends WebViewClient { 
     @Override 
     public void onPageStarted(WebView view, String url, Bitmap favicon) { 
      // TODO Auto-generated method stub 
      super.onPageStarted(view, url, favicon); 
      mySwipeRefreshLayout.setRefreshing(false); 
      mProgressBar.progressiveStart(); 
     } 

     @Override 
     public boolean shouldOverrideUrlLoading(WebView view, String url) { 
      // TODO Auto-generated method stub 
      view.loadUrl(url); 
      return true; 
     } 

     @Override 
     public void onReceivedError(WebView view, WebResourceRequest request, 
WebResourceError error) { 
      super.onReceivedError(view, request, error); 
      mySwipeRefreshLayout.setRefreshing(false); 
      mProgressBar.progressiveStop(); 
     } 

     @Override 
     public void onPageFinished(WebView view, String url) { 
      super.onPageFinished(view, url); 
      mySwipeRefreshLayout.setRefreshing(false); 
      mProgressBar.progressiveStop(); 
     } 
    } 
} 
+0

peut-être que vous êtes à la recherche de ceci? 'viewPager.setOffScreenPageLimit (5)' –

+0

[Peut être ceci] (https://developer.android.com/reference/android/webkit/WebSettings.html#setCacheMode (int)) –

+0

@ sam_0829 qu'est-ce que cela fait? –

Répondre

0

Ce que vous recherchez est:

viewPager.setOffScreenPageLimit(5); 

En appelant cela, vous remplacez le comportement par défaut de ViewPager qui maintient gauche -right & page actuelle en mémoire. Soyez prudent lors de l'utilisation cependant. vous ne devriez généralement pas garder plus de pages en mémoire puis la valeur par défaut.

+0

salut je veux savoir comment ne pas télécharger et image dans le site webview? –