package com.yuzhi.fine.activity; import android.os.Bundle; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentManager; import android.support.v4.app.FragmentTransaction; import android.view.KeyEvent; import android.widget.RadioGroup; import com.yuzhi.fine.R; import com.yuzhi.fine.fragment.BufferKnifeFragment; import com.yuzhi.fine.fragment.MainPagerFragment; import com.yuzhi.fine.fragment.MemberFragment; import com.yuzhi.fine.ui.UIHelper; import java.util.ArrayList; import java.util.Arrays; public class MainActivity extends BaseFragmentActivity { private static final String TAG = MainActivity.class.getSimpleName(); private static final String CURR_INDEX = "currIndex"; private static int currIndex = 0; private RadioGroup group; private ArrayList<String> fragmentTags; private FragmentManager fragmentManager; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); fragmentManager = getSupportFragmentManager(); initData(savedInstanceState); initView(); } @Override protected void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); outState.putInt(CURR_INDEX, currIndex); } private void initData(Bundle savedInstanceState) { fragmentTags = new ArrayList<>(Arrays.asList("HomeFragment", "ImFragment", "InterestFragment", "MemberFragment")); currIndex = 0; if(savedInstanceState != null) { currIndex = savedInstanceState.getInt(CURR_INDEX); hideSavedFragment(); } } private void hideSavedFragment() { Fragment fragment = fragmentManager.findFragmentByTag(fragmentTags.get(currIndex)); if(fragment != null) { fragmentManager.beginTransaction().hide(fragment).commit(); } } private void initView() { group = (RadioGroup) findViewById(R.id.group); group.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() { @Override public void onCheckedChanged(RadioGroup group, int checkedId) { switch (checkedId) { case R.id.foot_bar_home: currIndex = 0; break; case R.id.foot_bar_im: currIndex = 1; break; case R.id.foot_bar_interest: currIndex = 2; break; case R.id.main_footbar_user: currIndex = 3; break; default: break; } showFragment(); } }); showFragment(); } private void showFragment() { if (currIndex == 3) { UIHelper.showLogin(MainActivity.this); } FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); Fragment fragment = fragmentManager.findFragmentByTag(fragmentTags.get(currIndex)); if(fragment == null) { fragment = instantFragment(currIndex); } for (int i = 0; i < fragmentTags.size(); i++) { Fragment f = fragmentManager.findFragmentByTag(fragmentTags.get(i)); if(f != null && f.isAdded()) { fragmentTransaction.hide(f); } } if (fragment.isAdded()) { fragmentTransaction.show(fragment); } else { fragmentTransaction.add(R.id.fragment_container, fragment, fragmentTags.get(currIndex)); } fragmentTransaction.commitAllowingStateLoss(); fragmentManager.executePendingTransactions(); } private Fragment instantFragment(int currIndex) { switch (currIndex) { case 0: return new MainPagerFragment(); case 1: return new BufferKnifeFragment(); case 2: return new BufferKnifeFragment(); case 3: return new MemberFragment(); default: return null; } } @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK) { moveTaskToBack(true); return true; } return super.onKeyDown(keyCode, event); } }