在Fragment中如果用replace来进行fragment的切换的话:也就是如下这种
Fragment fragmentT = new RandomListFragment(); FragmentTransaction ftransaction = getSupportFragmentManager().beginTransaction(); ftransaction.replace(R.id.sl_dailyFragment, fragmentT); ftransaction.commit();
如果第二个布局不够大不能覆盖的话是会显示出前面一个布局的,如果刚好没覆盖的地方有点击事件,那么点击事件就会穿透的前面一个布局去。replace在这就只是布局覆盖的意思。
所以建议使用Hide和show的功能 这里就相当于布局里面的invisible和visible了 不会造成下次布局的切换界面数据再次加载。
如下:
先定义全局的变量:
//开启一个事务管理 private FragmentTransaction ftransaction; //定义一个初始的当前fragment private Fragment currentFragment=new Fragment();
//切换fragment的代码 private void switchFragment(Fragment targetFragment) { ftransaction= getSupportFragmentManager().beginTransaction(); if (!targetFragment.isAdded()) { if (currentFragment != null) { ftransaction.hide(currentFragment); } ftransaction.add(R.id.sl_dailyFragment, targetFragment) .commit(); } else { ftransaction.hide(currentFragment) .show(targetFragment) .commit(); } //更改当前的fragment所指向的值 currentFragment = targetFragment; }
//切换fragment调用的方法
Fragment validFragment = new RandomListFragment(); switchFragment(validFragment);