package com.porster.gift.view; import android.content.Intent; import android.os.Bundle; import android.support.v4.app.FragmentTransaction; import android.view.View; import android.view.ViewGroup; import com.porster.gift.R; import com.porster.gift.core.BaseActivity; import com.porster.gift.core.BaseFragment; import com.porster.gift.core.DataManager; import com.porster.gift.core.SessionData; import com.porster.gift.core.ThemeCore; import com.porster.gift.utils.ApiUtils; import com.porster.gift.view.setting.ThemeAct; import com.porster.gift.widget.XDialog; /** * 主页 * Created by Porster on 17/2/23. */ public class MainTabAct extends BaseActivity implements View.OnClickListener{ /**当前显示的fragment*/ public BaseFragment contentFragment; StudyFragment mStudyFragment; AuthFragment mGiftFragment; FailFragment mFailFragment; SettingFragment mSettingFragment; int[] tabIds={R.id.tab_test,R.id.tab_exam,R.id.tab_failed,R.id.tab_setting}; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.act_main_tab); mStudyFragment=new StudyFragment(); mGiftFragment=new AuthFragment(); mFailFragment=new FailFragment(); mSettingFragment=new SettingFragment(); initUI(); tintTheme(); } private void initUI() { for (int tabId : tabIds) { $(tabId,this); } $(tabIds[0]).performClick(); boolean fisrtRun= (boolean) SessionData.getObject(mContext,"fisrtRun",true); if(fisrtRun){ XDialog.showRadioDialog(mContext,"作者的话","所有内容全部个人整理,出错请提issue,多多包涵",null); SessionData.setObject(mContext,"fisrtRun",false); } //监听解析进度 if(DataManager.getInstance().getGiftModels().size()==0){ showProgressDialog("正在解析题库"); DataManager.getInstance().setOnAnalysisStateListener(new DataManager.OnAnalysisStateListener() { @Override public void onStart() { showProgressDialog("正在解析题库"); } @Override public void onEnd() { dismissProgressDialog(); } }); } } /** * Fragment切换方法 * * @Date 2014-3-7 * @param hideFragment 要隐藏的Fragment 可以为null * @param startFragment 要启动的Fragment * @return Boolean 是否切换了 */ public boolean addFragmentContainer(BaseFragment hideFragment, BaseFragment startFragment, int container) { if (contentFragment != null) { //当前Fragment与启动发Fragment一致不执行任何操作 if (contentFragment.getTagKey().equals(startFragment.getTagKey())) { //不能直接用startFragment和contentFragment对象地址比较,否则异常闪退的话会出现两层一样的界面 return false; } } //记录当前Fragment contentFragment = startFragment; //开启一个事物 FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); String tagKey = startFragment.getTagKey(); //不为空的话隐藏 if (hideFragment != null) { transaction.hide(hideFragment); } //已经添加的话显示 if (startFragment.isAdded()) { transaction.show(startFragment); //第一次添加,并保存tagKey(Fragment类名),可以用getSupportFragmentManager()直接根据tagKey名取出该Fragment进行操作 } else { transaction.add(container, startFragment, tagKey); } transaction.commitAllowingStateLoss(); return true; } @Override public void onClick(View v) { int id=v.getId(); changeTab(id); switch (id){ case R.id.tab_test: addFragmentContainer(contentFragment,mStudyFragment,R.id.container); break; case R.id.tab_exam: addFragmentContainer(contentFragment,mGiftFragment,R.id.container); break; case R.id.tab_failed: addFragmentContainer(contentFragment,mFailFragment,R.id.container); break; case R.id.tab_setting: addFragmentContainer(contentFragment,mSettingFragment,R.id.container); break; } } private void changeTab(int id){ for (int i = 0; i < tabIds.length; i++) { $(tabIds[i]).setSelected(false); } $(id).setSelected(true); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { if(requestCode== ThemeAct.REQ_THEME&&resultCode==RESULT_OK){ tintTheme(); }else{ contentFragment.onActivityResult(requestCode,resultCode,data); } } private void tintTheme(){ int themeColor=ThemeCore.getThemeColor(this); if (ApiUtils.isLolinpop()) { getWindow().setStatusBarColor(ThemeCore.getStateBarColor(themeColor)); } ((ViewGroup)$(tabIds[0]).getParent()).setBackgroundColor(themeColor); mStudyFragment.tintTheme(); mSettingFragment.tintTheme(); mFailFragment.tintTheme(); mGiftFragment.tintTheme(); } boolean canBack; @Override public void onBackPressed() { if(contentFragment!=mStudyFragment){ $(tabIds[0]).performClick(); }else{ if(canBack){ finish(); return; } canBack=true; showToast("再按一次退出"); getWindow().getDecorView().postDelayed(new Runnable() { @Override public void run() { canBack=false; } },1500); } } }