建设网站过程视频dede查看网站
news/
2025/9/29 15:53:52/
文章来源:
建设网站过程视频,dede查看网站,django做的网站安全吗,手机软件编程项目场景#xff1a;
项目首页使用RadioGroupRadioButtonFragment实现页面切换#xff0c;出现了一个问题fragment会出现重叠问题#xff0c;就是一个fragment显示了两层#xff0c; 并不是必现问题。
经过排查发现是项目主页面Activity被销毁重建了#xff0c;但是之前…项目场景
项目首页使用RadioGroupRadioButtonFragment实现页面切换出现了一个问题fragment会出现重叠问题就是一个fragment显示了两层 并不是必现问题。
经过排查发现是项目主页面Activity被销毁重建了但是之前的fragment对象没有被回收导致。
原因分析
在旋转屏幕后或者页面调到后台一段时间在打开就会出现Fragment重叠显示显示了两个相同fragment的效果。 解决方案
第一步在添加fragment的时候添加key。 第二步再onCreate里判断savedInstanceState是否为空若不为空说 明是重建的activity,用key将fragment对象取出来即可。 下面我们来看一下具体代码 private FragmentManager fManager;private FragmentTransaction transaction;private ListFragment fragmentList new ArrayList();private FragmentOne fragmentOne;private FragmentTwo fragmentTwo;private FragmentFour fragmentFour;private FragmentFive fragmentFive;private static final String FRAGMENT_ONE_KEY FragmentOne;private static final String FRAGMENT_TWO_KEY FragmentTwo;private static final String FRAGMENT_FOUR_KEY FragmentFour;private static final String FRAGMENT_FIVE_KEY FragmentFive;protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);fManager getSupportFragmentManager();//如果activity销毁后重建在这里拿出之前的Fragment对象。if (savedInstanceState ! null) {fragmentOne (FragmentOne) fManager.findFragmentByTag(FRAGMENT_ONE_KEY);fragmentTwo (FragmentTwo) fManager.findFragmentByTag(FRAGMENT_TWO_KEY);fragmentFour (FragmentFour) fManager.findFragmentByTag(FRAGMENT_FOUR_KEY);fragmentFive (FragmentFive) fManager.findFragmentByTag(FRAGMENT_FIVE_KEY);initFragment(fragmentOne);initFragment(fragmentTwo);initFragment(fragmentFour);initFragment(fragmentFive);}initView();} private void initView() {fragmentOne (FragmentOne) fManager.findFragmentByTag(FRAGMENT_ONE_KEY);if (fragmentOne null) {fragmentOne new FragmentOne();fragmentList.add(fragmentOne);hideOthersFragment(fragmentOne, true, FRAGMENT_ONE_KEY);} else {hideOthersFragment(fragmentOne, false, FRAGMENT_ONE_KEY);}radioGroup.setOnCheckedChangeListener((group, checkedId) - {switch (checkedId) {case R.id.radio1:if (fragmentOne null) {fragmentOne new FragmentOne();fragmentList.add(fragmentOne);hideOthersFragment(fragmentOne, true, FRAGMENT_ONE_KEY);} else {hideOthersFragment(fragmentOne, false, FRAGMENT_ONE_KEY);}break;case R.id.radio2:if (fragmentTwo null) {fragmentTwo new FragmentTwo();fragmentList.add(fragmentTwo);hideOthersFragment(fragmentTwo, true, FRAGMENT_TWO_KEY);} else {hideOthersFragment(fragmentTwo, false, FRAGMENT_TWO_KEY);}break;case R.id.radio4:if (fragmentFour null) {fragmentFour new FragmentFour();fragmentList.add(fragmentFour);hideOthersFragment(fragmentFour, true, FRAGMENT_FOUR_KEY);} else {hideOthersFragment(fragmentFour, false, FRAGMENT_FOUR_KEY);}break;case R.id.radio5:if (fragmentFive null) {fragmentFive new FragmentFive();fragmentList.add(fragmentFive);hideOthersFragment(fragmentFive, true, FRAGMENT_FIVE_KEY);} else {hideOthersFragment(fragmentFive, false, FRAGMENT_FIVE_KEY);}break;}});}
下面是两个方法 //将fragment对象添加进fragmentListpublic void initFragment(Fragment fragment) {if (fragment ! null) {fragmentList.add(fragment);}}}//加载fragmentpublic void hideOthersFragment(Fragment showFragment, boolean isAdd, String key) {transaction fManager.beginTransaction();if (isAdd) {//这里别忘了添加keytransaction.add(R.id.Frame_ID, showFragment, key);}if (ObjectUtils.isNotEmpty(fragmentList)) {for (Fragment fragment : fragmentList) {if (showFragment.equals(fragment)) {transaction.show(fragment);} else {transaction.hide(fragment);}}transaction.commit();}}
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/921955.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!