gpt4 book ai didi

android - 使 webview 在带有大量 fragment 的 tablayout 中只加载一次

转载 作者:行者123 更新时间:2023-11-30 00:19:53 25 4
gpt4 key购买 nike

我正在使用带有 5 个 fragment 的选项卡布局。每个 fragment 都有带有唯一网络链接的 WebView 。我选择选项卡时一切正常。但是当我重新访问在重新加载之前完成加载的同一个选项卡时。有什么原因可以将内容保存在 fragment 中,这样我只需加载一次 fragment 链接。

我的代码

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

fragment 是

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

最佳答案

您正在寻找的是:

viewPager.setOffScreenPageLimit(5);

通过调用它,您可以覆盖 ViewPager 的默认行为,它会在内存中保留左右页面和当前页面。不过在使用时要小心。您通常不应在内存中保留比默认更多的页面。

关于android - 使 webview 在带有大量 fragment 的 tablayout 中只加载一次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46514602/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com