1.BaseFragment
public abstract class BaseFragment extends Fragment { private View view; //Fragment的View加载完毕的标记 private boolean isViewCreated; //Fragment对用户可见的标记 private boolean isUIVisible; @Override public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); isViewCreated=true; lazyLoad(); } @Override public void setUserVisibleHint(boolean isVisibleToUser) { super.setUserVisibleHint(isVisibleToUser); //isVisibleToUser这个boolean值表示:该Fragment的UI 用户是否可见 if (isVisibleToUser) { isUIVisible = true; lazyLoad(); } else { isUIVisible = false; } } private void lazyLoad() { //这里进行双重标记判断,是因为setUserVisibleHint会多次回调,并且会在onCreateView执行前回调,必须确保onCreateView加载完毕且页面可见,才加载数据 if (isViewCreated && isUIVisible) { loadData(); //数据加载完毕,恢复标记,防止重复加载 isViewCreated = false; isUIVisible = false; } } private void loadData() { } @Nullable @Override public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { view = inflater.inflate(initlayout(), container, false); return view; } @Override public void onActivityCreated(@Nullable Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); initview(view); initData(); } protected abstract int initlayout(); protected abstract void initview(View view); protected abstract void initData(); }
2.MainActivity
public class MainActivity extends FragmentActivity { @BindView(R.id.viewpager) ViewPager viewpager; @BindView(R.id.btn1) RadioButton btn1; @BindView(R.id.btn2) RadioButton btn2; @BindView(R.id.btn3) RadioButton btn3; @BindView(R.id.btn4) RadioButton btn4; @BindView(R.id.btn5) RadioButton btn5; @BindView(R.id.group) RadioGroup group; private ArrayList<Fragment> list; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ButterKnife.bind(this); //创建Fragment集合 list = new ArrayList<>(); //将5个fragment加入集合中 list.add(new FragmentOne()); list.add(new FragmentTwo()); list.add(new FragmentThree()); list.add(new FragmentFour()); list.add(new FragmentFive()); //创建viewpager适配器 viewpager.setAdapter(new FragmentPagerAdapter(getSupportFragmentManager()) { @Override public Fragment getItem(int i) { return list.get(i); } @Override public int getCount() { return list.size(); } }); //设置按钮点击事件 group.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() { @Override public void onCheckedChanged(RadioGroup group, int checkedId) { switch (checkedId){ case R.id.btn1: viewpager.setCurrentItem(0); break; case R.id.btn2: viewpager.setCurrentItem(1); break; case R.id.btn3: viewpager.setCurrentItem(2); break; case R.id.btn4: viewpager.setCurrentItem(3); break; case R.id.btn5: viewpager.setCurrentItem(4); break; default: break; } } }); //viewpager滑动事件 viewpager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() { @Override public void onPageScrolled(int i, float v, int i1) { } @Override public void onPageSelected(int i) { switch (i){ case 0: group.check(R.id.btn1); break; case 1: group.check(R.id.btn2); break; case 2: group.check(R.id.btn3); break; case 3: group.check(R.id.btn4); break; case 4: group.check(R.id.btn5); break; default: break; } } @Override public void onPageScrollStateChanged(int i) { } }); } }