1 SecondActivity.class
2 @Override
3 protected void onCreate(Bundle savedInstanceState) {
4 super.onCreate(savedInstanceState);
5 EventBus.getDefault().register(this);
6 setContentView(R.layout.activity_second);
7 but1= (Button) findViewById(R.id.but1);
8 but2= (Button) findViewById(R.id.but2);
9 but1.setOnClickListener(this);
10 but2.setOnClickListener(this);
11 aFragment=AFragment.newInstance(null, null);
12 bFragment=BFragment.newInstance(null, null);
13 changeFragment(aFragment);
14 addFragmentTransaction(aFragment);
15 addFragmentTransaction(bFragment);
16
17 }
18 private void addFragmentTransaction(Fragment fragment) {
19 FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
20 transaction.add(R.id.fl_container, fragment);
21 transaction.commit();
22 }
23 private void changeFragment(Fragment f){
24 changeFragment2(f);
25 }
26
27 private void changeFragment2(Fragment f){
28 Log.i(TAG, "SecondActivity.changeFragment2: f="+f.getClass().getName());
29 FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
30 if(f.getClass().getName().equals(aFragment.getClass().getName())){
31 transaction.hide(bFragment);
32 transaction.show(aFragment);
33 bFragment.setUserVisibleHint(false);
34 aFragment.setUserVisibleHint(true);
35 }else {
36 transaction.hide(aFragment);
37 transaction.show(bFragment);
38 aFragment.setUserVisibleHint(false);
39 bFragment.setUserVisibleHint(true);
40 }
41 transaction.commit();
42 }
以上两种解决方案各有优缺点,总体来说,如果想每次Fragment显示时都要重新更新View,使用方案一的方式更好,但是方案一如果多次切换,由于之前的Fragment已经与当前Activity解除绑定,所以没有了引用的地方,但是仍然存在内存中,如果系统释放内存不及时,就会有内存泄漏的隐患;同样对于方案二来说,每次切换不会重新更新界面,所以如果想在显隐时做些操作,只能显示调用Fragment的setUserVisibleHint()方法并重写该方法以做操作。说到方案二的这种形式,和ViewPager的相关切换方式有些相同,可参考。