我正在使用带有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();
}
}
}
答案 0 :(得分:1)
您正在寻找的是:
viewPager.setOffScreenPageLimit(5);
通过调用此方法,您可以覆盖ViewPager
的默认行为,该行为保持左右&amp;内存中的当前页面。虽然使用它时要小心。你通常不应该在内存中保留更多页面,而不是默认页面。