本人首次写博客,只为把自己的开发过程记录下来,定有许多不足,望各位海涵。不说废话上干货
如今Android 中fragment的使用越来越频繁,在实现多个fragment之后,如若在切换时使用replace()方法替换Fragment ,那就要不断的去实例化,消耗资源。所以把replace()用add()+show()+hide()来替代从而当Fragment实例化之后就控制Fragment的显示隐藏。
直接上代码:
public class MainActivity extends BaseActivity implements View.OnClickListener { FragmentManager fm; // 为每个fragment设置标签 private String[] tags = new String[]{"HomeFragment", "ContentFragment", "ListFragment", "UserFragment"}; private TextView mTabOne, mTabTwo, mTabThree, mTabFour; private List<Fragment> fragments = new ArrayList<>(); Fragment mHomeFragment, mContentFragment, mListFragment, mUserFragment; private Fragment mContent;//当前fragment @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initView(); init(); } private void init() { fm = getFragmentManager(); mHomeFragment = new HomeFragment(); mUserFragment = new UserFragment(); mListFragment = new ListFragment(); mContentFragment = new ContentFragment(); fragments.add(0, mHomeFragment); fragments.add(1, mContentFragment); fragments.add(2, mListFragment); fragments.add(3, mUserFragment); mContent = mHomeFragment; FragmentTransaction ft = fm.beginTransaction(); ft.add(R.id.content_frame, mContent); ft.commitAllowingStateLoss(); } /** * 当activity非正常销毁时会进入此方法中 保存一些临时性的数据 * * @param outState * @param outPersistentState */ @Override public void onSaveInstanceState(Bundle outState, PersistableBundle outPersistentState) { super.onSaveInstanceState(outState, outPersistentState); stateCheck(outState); } private void initView() { mTabFour = (TextView) findViewById(R.id.home_tab_four); mTabThree = (TextView) findViewById(R.id.home_tab_three); mTabTwo = (TextView) findViewById(R.id.home_tab_two); mTabOne = (TextView) findViewById(R.id.home_tab_one); mTabFour.setOnClickListener(this); mTabThree.setOnClickListener(this); mTabTwo.setOnClickListener(this); mTabOne.setOnClickListener(this); } /** * fragment 切换 * * @param from * @param to */ public void switchFragment(Fragment from, Fragment to, int position) { if (mContent != to) { mContent = to; FragmentTransaction transaction = fm.beginTransaction(); if (!to.isAdded()) { // 先判断是否被add过 transaction.hide(from) .add(R.id.content_frame, to, tags[position]).commitAllowingStateLoss(); // 隐藏当前的fragment,add下一个到Activity中 } else { transaction.hide(from).show(to).commitAllowingStateLoss(); // 隐藏当前的fragment,显示下一个 } } } /** * 状态检测 用于内存不足的时候保证fragment不会重叠 * * @param savedInstanceState */ private void stateCheck(Bundle savedInstanceState) { if (savedInstanceState == null) { fm = getFragmentManager(); fm = getFragmentManager(); FragmentTransaction fts = fm.beginTransaction(); HomeFragment af = new HomeFragment(); mContent = af; fts.add(R.id.content_frame, af); fts.commit(); } else { /** * 通过设置的tag来寻找fragment */ HomeFragment home = (HomeFragment) getFragmentManager() .findFragmentByTag(tags[0]); ContentFragment content = (ContentFragment) getFragmentManager() .findFragmentByTag(tags[1]); ListFragment list = (ListFragment) getFragmentManager() .findFragmentByTag(tags[2]); UserFragment user = (UserFragment) getFragmentManager() .findFragmentByTag(tags[3]); getFragmentManager().beginTransaction().show(home).hide(content).hide(list) .hide(user).commitAllowingStateLoss(); } } @Override public void onClick(View view) { switch (view.getId()) { case R.id.home_tab_four: switchFragment(mContent, fragments.get(3), 3); break; case R.id.home_tab_three: switchFragment(mContent, fragments.get(2), 2); break; case R.id.home_tab_two: switchFragment(mContent, fragments.get(1), 1); break; case R.id.home_tab_one: switchFragment(mContent, fragments.get(0), 0); break; } } }以上就是activity中的代码了!如有不足和错误,希望各位大神多多指教留言!