使用大量片段在weblayout中加载webview一次

时间:2017-10-01 16:48:31

标签: android android-fragments android-webview

我正在使用带有5个片段的tab-layout。每个片段都有webview,具有独特的Web链接。我选择标签的时间一切正常。但是当我再次访问重新加载之前完成加载的相同选项卡时。 有没有为什么我可以保存片段中的内容,以便我只需加载片段链接一次。

我的代码

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

片段是

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

1 个答案:

答案 0 :(得分:1)

您正在寻找的是:

viewPager.setOffScreenPageLimit(5);

通过调用此方法,您可以覆盖ViewPager的默认行为,该行为保持左右&amp;内存中的当前页面。虽然使用它时要小心。你通常不应该在内存中保留更多页面,而不是默认页面。