首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使webview在包含大量片段的表格布局中只加载一次。

使webview在包含大量片段的表格布局中只加载一次。
EN

Stack Overflow用户
提问于 2017-10-01 16:48:31
回答 1查看 825关注 0票数 2

我使用的选项卡布局与5段。每个片段都有有独特网页链接的webview。我选择选项卡的时间一切都很好。但是,当我重新访问相同的选项卡时,该选项卡将在重新加载之前完成加载。有什么原因可以将内容保存在片段中,以便只加载片段链接一次吗?

我的代码

代码语言:javascript
复制
    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;
        }
    }
}

碎片是

代码语言:javascript
复制
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();
        }
    }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-10-01 17:29:39

你要找的是:

代码语言:javascript
复制
viewPager.setOffScreenPageLimit(5);

通过调用它,您将覆盖ViewPager的默认行为,该行为将左、右和当前页保存在内存中。不过,在使用这个时要小心。一般情况下,您不应该在内存中保留更多的页面,而不是默认的。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46514602

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档