先看 这一段 代码,
private void showDetail(int index) {
manager = getFragmentManager();
FragmentTransaction transaction = manager.beginTransaction();
switch (index) {
case 0:
details = FragmentFactory.createFragment(3);
transaction.add(R.id.id_fl_radio_group, details);// 初始化的时候增加第一个Fragment
break;
case 1:
details = FragmentFactory.createFragment(0);
transaction.replace(R.id.id_fl_radio_group, details);
break;
case 2:
details = FragmentFactory.createFragment(1);
transaction.replace(R.id.id_fl_radio_group, details);
// transaction.addToBackStack(null);
break;
case 3:
details = FragmentFactory.createFragment(2);
transaction.replace(R.id.id_fl_radio_group, details);
// transaction.addToBackStack(null);
break;
}
transaction.commit();
}
每次 relpace的时候 fragment 会重走生命周期,比如 当前是 展示省市 的fragment ,如果点击展示 广播频道信息页面,infoFragment 会重走生命周期。如果设置了
更新数据的方法,那么在oncreat或者oncreatview里边会把数据重置,所以就要用 if (!((RadioInfoFragment) details).isAdded()) 来判断当前Fragment是否被加入到当前activity,
如果没有的话就不要调用刷新的方法而是 设置 Bundle bundle = new Bundle();
bundle.putSerializable("data", (Serializable) infoCurrentLists);
bundle.putInt("pos", -1);
((RadioPlayFragment) details).setArguments(bundle);用bundle
//把参数传递到oncreat里变,然后把数据展示数来,//if (details instanceof RadioPlayFragment) 这个方法来判断 当前展示的是哪个 Fragment,如果没有的话就不要调用 对应的方法,还有 viewpager 的noticefidetasetchanged 是无效的
2,,,fragment 的一些方法,判断当前是否正在显示
LogUtils.getIntance().e(" fragmentPlay.isAdded()---" + fragmentPlay.isAdded() + "isDetached---" + fragmentPlay.isDetached() +"isInLayout---"+fragmentPlay.isInLayout()+"isVisible()---"+ fragmentPlay.isVisible());