package org.aisen.weibo.sina.ui.activity.base; import android.app.Activity; import android.app.Fragment; import android.content.Intent; import android.os.Bundle; import android.text.TextUtils; import org.aisen.android.ui.activity.basic.BaseActivity; import org.aisen.android.ui.activity.container.FragmentArgs; import org.aisen.android.ui.fragment.ABaseFragment; import org.aisen.weibo.sina.ui.fragment.base.BizFragment; import java.lang.reflect.Method; /** * Created by wangdan on 15/12/21. */ public class SinaCommonActivity extends BaseActivity implements AisenActivityHelper.EnableSwipeback { public static final String FRAGMENT_TAG = "FRAGMENT_CONTAINER"; private int contentId; private int overrideTheme = -1; /** * 启动一个界面 * * @param activity * @param clazz * @param args */ public static void launch(Activity activity, Class<? extends Fragment> clazz, FragmentArgs args) { Intent intent = new Intent(activity, SinaCommonActivity.class); intent.putExtra("className", clazz.getName()); if (args != null) intent.putExtra("args", args); activity.startActivity(intent); } public static void launchForResult(Fragment fragment, Class<? extends Fragment> clazz, FragmentArgs args, int requestCode) { if (fragment.getActivity() == null) return; Activity activity = fragment.getActivity(); Intent intent = new Intent(activity, SinaCommonActivity.class); intent.putExtra("className", clazz.getName()); if (args != null) intent.putExtra("args", args); fragment.startActivityForResult(intent, requestCode); } public static void launchForResult(Activity from, Class<? extends Fragment> clazz, FragmentArgs args, int requestCode) { Intent intent = new Intent(from, SinaCommonActivity.class); intent.putExtra("className", clazz.getName()); if (args != null) intent.putExtra("args", args); from.startActivityForResult(intent, requestCode); } @SuppressWarnings({ "rawtypes", "unchecked" }) @Override protected void onCreate(Bundle savedInstanceState) { contentId = savedInstanceState == null ? org.aisen.android.R.layout.comm_ui_fragment_container : savedInstanceState.getInt("contentId"); overrideTheme = savedInstanceState == null ? -1 : savedInstanceState.getInt("overrideTheme"); Fragment fragment = null; if (savedInstanceState == null) { try { String className = getIntent().getStringExtra("className"); if (TextUtils.isEmpty(className)) { super.onCreate(savedInstanceState); finish(); return; } FragmentArgs values = (FragmentArgs) getIntent().getSerializableExtra("args"); Class clazz = Class.forName(className); fragment = (Fragment) clazz.newInstance(); // 设置参数给Fragment if (values != null) { try { Method method = clazz.getMethod("setArguments", new Class[] { Bundle.class }); method.invoke(fragment, FragmentArgs.transToBundle(values)); } catch (Exception e) { } } // 重写Activity的主题 try { Method method = clazz.getMethod("setActivityTheme"); if (method != null) { int theme = Integer.parseInt(method.invoke(fragment).toString()); if (theme > 0) { overrideTheme = theme; } } } catch (Exception e) { } // 重写Activity的contentView try { Method method = clazz.getMethod("inflateActivityContentView"); if (method != null) { int fragmentConfigId = Integer.parseInt(method.invoke(fragment).toString()); if (fragmentConfigId > 0) { contentId = fragmentConfigId; } } } catch (Exception e) { } } catch (Exception e) { e.printStackTrace(); super.onCreate(savedInstanceState); finish(); return; } } super.onCreate(savedInstanceState); setContentView(contentId); if (fragment != null) { if (!(fragment instanceof ABaseFragment) || ((ABaseFragment) fragment).inflateContentView() > 0) { getFragmentManager().beginTransaction().add(org.aisen.android.R.id.fragmentContainer, fragment, FRAGMENT_TAG).commit(); } else { getFragmentManager().beginTransaction().add(fragment, FRAGMENT_TAG).commit(); } } if (getSupportActionBar() != null) getSupportActionBar().setDisplayShowHomeEnabled(false); BizFragment.createBizFragment(this); } @Override protected void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); outState.putInt("contentId", contentId); outState.putInt("overrideTheme", overrideTheme); } @Override protected int configTheme() { if (overrideTheme > 0) return overrideTheme; return super.configTheme(); } @Override public boolean canSwipe() { return true; } }