package com.forfan.bigbang.component.base; import android.os.Bundle; import android.support.v4.app.DialogFragment; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentManager; import android.support.v4.app.FragmentTransaction; import android.view.MenuItem; import com.umeng.analytics.MobclickAgent; import java.util.List; /** * Created by penglu on 2016/4/27. */ public class BaseActivity extends PermissionActivity { private Fragment currentFragment; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); } public void switchFragment(Fragment fragment){ if (currentFragment!=null&¤tFragment==fragment){ return; } FragmentManager fm=getSupportFragmentManager(); FragmentTransaction ft=fm.beginTransaction(); if (currentFragment!=null){ ft.hide(currentFragment); } ft.show(fragment); ft.commitAllowingStateLoss(); currentFragment=fragment; } @Override protected void onResume() { super.onResume(); try { MobclickAgent.onResume(this); } catch (Throwable e) { } } @Override protected void onPause() { try { MobclickAgent.onPause(this); } catch (Throwable e) { } super.onPause(); } public void registerFragment(int id, Fragment fragment){ if (currentFragment==fragment){ return; } FragmentManager fm=getSupportFragmentManager(); FragmentTransaction ft=fm.beginTransaction(); if (currentFragment!=null){ ft.hide(currentFragment); } ft.add(id,fragment,fragment.getClass().getName()); ft.commit(); currentFragment=fragment; } @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case android.R.id.home: onBackPressed(); return true; } return (super.onOptionsItemSelected(item)); } protected void recoverFragment(String currentFragmentTag){ if (currentFragmentTag==null){ return; } FragmentManager fm=getSupportFragmentManager(); FragmentTransaction ft=fm.beginTransaction(); List<Fragment> fragments=fm.getFragments(); for (Fragment fragment:fragments){ if (fragment.getTag().equals(currentFragmentTag)){ ft.show(fragment); }else { ft.hide(fragment); } } ft.commitAllowingStateLoss(); Fragment current=fm.findFragmentByTag(currentFragmentTag); switchFragment(current); } @Override protected void onSaveInstanceState(Bundle outState) { removeDialogFragment(); super.onSaveInstanceState(outState); } protected void removeDialogFragment(){ FragmentManager fm=getSupportFragmentManager(); FragmentTransaction ft=fm.beginTransaction(); List<Fragment> fragments=fm.getFragments(); if (fragments==null){ return; } for (Fragment fragment:fragments){ if (fragment instanceof DialogFragment){ ft.remove(fragment); } } ft.commitAllowingStateLoss(); } }