fragment大家经常应用到 声明周期依赖于宿主activity
1 第一种用法:切换fragment
/**
使用replace方法
*/
private void showMyFragment(Fragment fragment) {
FragmentTransaction transaction = fragmentManager.beginTransaction();
transaction.replace(R.id.layout_fragment, fragment);
transaction.commit();}
这种方法如果切换的fragment进行请求网络等会消耗流量和性能
2 第二种用法:add hide show------onHiddenChange()
使用场景:add hide show进行fragment切换的时候
所以按照google老大哥的方式 添加使用add 隐藏使用hide 需要判断是否添加 如果添加直接show
/**
* 修改显示的内容 不会重新加载
* newFragmeent 下一个fragment
* currentFrament 当前的fragment
*/
private void switchFragment(Fragment newFragmeent) {
if (newFragmeent != currentFrament ) {
FragmentTransaction transaction = fragmentManager.beginTransaction();
if (!newFragmeent.isAdded()) { // 判断是否被add过
// 隐藏当前的fragment,将 下一个fragment 添加进去
transaction.hide(currentFrament).add(R.id.layout_content, newFragmeent).commit();
} else {
// 隐藏当前的fragment,显示下一个fragment
transaction.hide(currentFrament).show(newFragmeent).commit();
}
currentFrament = newFragmeent
}}
使用add hide() show()方法切换fragment 不会走任何的生命周期 无法通过生命周期进行刷新
这个时候另一个方法就派上用处了 我们的主题之一:onHiddenChanged()
@Override
public void onHiddenChanged(boolean hidden) {
super.onHiddenChanged(hidden);if (hidden) { // 不在最前端显示 相当于调用了onPause();
//做一些事情 你懂得
return;
}else{ // 在最前端显示 相当于调用了onResume();
//数据刷新做一些自己的事情--你懂得
}}
3 setUservisibleHint()
使用场景:当fragment结合viewpager使用的时候 这个方法会调用
这个方法是在oncreateView之前使用 不要使用控件
@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
super.setUserVisibleHint(isVisibleToUser);
if (getUserVisibleHint()) {
//界面可见
} else {
//界面不可见 相当于onpause
}
}
尊重作者劳动成果:https://blog.csdn.net/kristch_wu/article/details/80000148
来源:CSDN
作者:飞中缘
链接:https://blog.csdn.net/csdn15002274757/article/details/103538095