package org.aisen.android.ui.activity.container; import android.app.Activity; import android.app.Fragment; import android.content.Intent; import android.os.Bundle; import android.text.TextUtils; import org.aisen.android.R; import org.aisen.android.ui.activity.basic.BaseActivity; import java.lang.reflect.Method; /** * Created by wangdan on 15-1-17. */ public class FragmentContainerActivity extends BaseActivity { private int overrideTheme = -1; public static final String FRAGMENT_TAG = "FRAGMENT_CONTAINER"; /** * 启动一个界面 * * @param activity * @param clazz * @param args */ public static void launch(Activity activity, Class<? extends Fragment> clazz, FragmentArgs args) { Intent intent = new Intent(activity, FragmentContainerActivity.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, FragmentContainerActivity.class); intent.putExtra("className", clazz.getName()); if (args != null) intent.putExtra("args", args); fragment.startActivityForResult(intent, requestCode); } public static void launchForResult(BaseActivity from, Class<? extends Fragment> clazz, FragmentArgs args, int requestCode) { Intent intent = new Intent(from, FragmentContainerActivity.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) { String className = getIntent().getStringExtra("className"); if (TextUtils.isEmpty(className)) { finish(); return; } int contentId = R.layout.comm_ui_fragment_container; FragmentArgs values = (FragmentArgs) getIntent().getSerializableExtra("args"); Fragment fragment = null; if (savedInstanceState == null) { try { 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("setTheme"); if (method != null) overrideTheme = Integer.parseInt(method.invoke(fragment).toString()); } catch (Exception e) { } // 重写Activity的contentView try { Method method = clazz.getMethod("setActivityContentView"); if (method != null) contentId = Integer.parseInt(method.invoke(fragment).toString()); } catch (Exception e) { } } catch (Exception e) { e.printStackTrace(); finish(); return; } } super.onCreate(savedInstanceState); setContentView(contentId); // BizFragment.getBizFragment(this); if (fragment != null) { getFragmentManager().beginTransaction().add(R.id.fragmentContainer, fragment, FRAGMENT_TAG).commit(); } if (getSupportActionBar() != null) getSupportActionBar().setDisplayShowHomeEnabled(false); } @Override protected int configTheme() { if (overrideTheme > 0) return overrideTheme; return super.configTheme(); } }