android Fragment相关问题
1.fragment的切换
以前做项目时,fragment切换总是用replace方法,这样对性能影响很大,所以换一种方式用hide和show方法进行展示。
首先定义一个全局的currentFragment
“`
private Fragment currentFragment = new Fragment();
private FragmentTransaction switchFragment(Fragment targetFragment) {
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
if(!targetFragment.isAdded()){
if(currentFragment != null){ transaction.hide(currentFragment); } transaction.add(R.id.ll_main,targetFragment,targetFragment.getClass().getName()); }else{ transaction.hide(currentFragment).show(targetFragment); } currentFragment = targetFragment; return transaction;}
“
然后再在切换button上直接调用即可
switchFragment(oneFg).commit();
如果想要刷新数据的话,可以利用fragment的隐藏方法:
@Override
public void onHiddenChanged(boolean hidden) {
super.onHiddenChanged(hidden);
if(hidden){ //隐藏 }else{ //显示 }}
2.fragment重叠
hide和show容易出现fragment重叠现象
解决方法:
通过重写 宿主activity的onSaveInstanceState 方法,然后不保存状态
@Override
protected void onSaveInstanceState(Bundle outState) {
// super.onSaveInstanceState(outState);
}
3.getActivity为空
解决方法:
Activity activity;
@Override
public void onAttach(Context context) {
super.onAttach(context);
activity = (Activity) context;
}
4.fragment嵌套
fragment嵌套经常出现崩溃
解决方法:
宿主fragment 使用getChildFragmentManager();
在宿主fragment中:
@Override
public void onDetach() {
super.onDetach();
try {
//参数是固定写法
Field childFragmentManager = Fragment.class.getDeclaredField(“mChildFragmentManager”);
childFragmentManager.setAccessible(true);
childFragmentManager.set(this, null);
} catch (NoSuchFieldException e) {
throw new RuntimeException(e);
} catch (IllegalAccessException e) {
throw new RuntimeException(e);
}
}
更多相关文章
- Android(安卓)TextView跑马灯效果
- Android之选项菜单和上下文菜单解析
- Android利用soap WSDL与Webservice通信
- Android之AsyncTask源码分析(第五篇:execute方法只能执行一次的原
- Android(安卓)判断一个url是否有效
- Android读取properties配置文件的实例详解
- android studio (mac) 快捷键
- 详解Android(安卓)getWidth和getMeasuredWidth
- Android(安卓)监听网络状态方法详解