1:抽fragment基类并且实现懒加载
public abstract class BaseAdapter extends Fragment {
private View view;
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
view = inflater.inflate(intoView(),container,false);
intoById(view);
return view;
}
protected abstract int intoView();
protected abstract void intoById(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() {
Log.i("xxx","郁珂");
}}
2:Activity中viewpager展示
public class MainActivity extends AppCompatActivity {
@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 List<Fragment> list;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ButterKnife.bind(this);
intoView();
intoData();
}
private void intoView() {
list = new ArrayList<>();
list.add(new FragmentOne());
list.add(new FragmentTwo());
list.add(new FragmentThree());
list.add(new FragmentFour());
list.add(new FragmentFive());
}
private void intoData() {
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;
}
}
});
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;
}
}
@Override
public void onPageScrollStateChanged(int i) {
}
});
}}
3:Activity中fragment展示
public class MainActivity extends AppCompatActivity {
@BindView(R.id.framelayout)
FrameLayout framelayout;
@BindView(R.id.btn1)
RadioButton btn1;
@BindView(R.id.btn2)
RadioButton btn2;
@BindView(R.id.btn3)
RadioButton btn3;
@BindView(R.id.radiogroup)
RadioGroup radiogroup;
private FragmentOne fragmentOne;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ButterKnife.bind(this);
initview(new FragmentOne());
radiogroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(RadioGroup group, int checkedId) {
switch (checkedId){
case R.id.btn1:
initview(new FragmentOne());break;
case R.id.btn2:
initview(new FragmentTwo());break;
case R.id.btn3:
initview(new FragmentThree());break;
}
}
});
}
private void initview(Fragment fragment) {
FragmentManager supportFragmentManager = getSupportFragmentManager();
FragmentTransaction replace = supportFragmentManager.beginTransaction().replace(R.id.framelayout, fragment);
replace.commit();
}}
在fragment中实现代码和实现上下拉刷新功能
public class HomeFragment extends BaseAdapter implements ImpView {
private RecyclerView rec;
private SwipyRefreshLayout swp;
private int page=1;
private Presenter presenter;
private Handler handler=new Handler();
@Override
protected int intoView() {
return R.layout.homefragment;
}
@Override
protected void intoById(View view) {
swp=view.findViewById(R.id.swp);
rec=view.findViewById(R.id.rec);
presenter = new Presenter(this);
presenter.getResultPresent(page);
LinearLayoutManager linearLayoutManager=new LinearLayoutManager(getActivity());
linearLayoutManager.setOrientation(OrientationHelper.VERTICAL);
rec.setLayoutManager(linearLayoutManager);
swp.setColorSchemeColors(R.color.colorAccent,R.color.colorPrimary,R.color.colorPrimaryDark);
swp.setDirection(SwipyRefreshLayoutDirection.BOTH);
swp.setOnRefreshListener(new SwipyRefreshLayout.OnRefreshListener() {
@Override
public void onRefresh(int index) {
page=1;
presenter.getResultPresent(page);
handler.postDelayed(new Runnable() {
@Override
public void run() {
swp.setRefreshing(false);
}
},2000);
}
@Override
public void onLoad(int index) {
page++;
presenter.getResultPresent(page);
handler.postDelayed(new Runnable() {
@Override
public void run() {
swp.setRefreshing(false);
}
},2000);
}
});
}
@Override
public void getResultView(List<ResultBean> resultBean) {
List<ResultBean.DataBean> data = resultBean.get(0).getData();
MyAdapter myAdapter = new MyAdapter(getActivity(), data);
rec.setAdapter(myAdapter);
}}