package com.gh.gamecenter; import android.content.Context; import android.content.Intent; import android.os.Bundle; import android.text.TextUtils; import android.view.MenuItem; import android.view.MotionEvent; import com.gh.base.ToolBarActivity; import com.gh.gamecenter.normal.NormalFragment; import androidx.fragment.app.Fragment; /** * Created by khy on 17/10/17. */ public abstract class NormalActivity extends ToolBarActivity { private Fragment mTargetFragment; public static final String NORMAL_FRAGMENT_NAME = "normalFragmentName"; public static final String NORMAL_FRAGMENT_BUNDLE = "normalFragmentBundle"; // 针对部分跳转不符合NormalActivity规则的额外处理,主要绑定NormalFragment protected Intent provideNormalIntent() { return null; } protected static Intent getTargetIntent(Context context, Class cls, Class t, Bundle bundle) { Intent intent = new Intent(context, cls); intent.putExtra(NORMAL_FRAGMENT_NAME, t.getCanonicalName()); intent.putExtra(NORMAL_FRAGMENT_BUNDLE, bundle); return intent; } protected static Intent getTargetIntent(Context context, Class cls, Class t) { Intent intent = new Intent(context, cls); intent.putExtra(NORMAL_FRAGMENT_NAME, t.getCanonicalName()); return intent; } public static void startFragmentNewTask(Context context, Class t, Bundle bundle) { Intent intent = new Intent(context, NormalActivity.class); intent.putExtra(NORMAL_FRAGMENT_NAME, t.getCanonicalName()); intent.putExtra(NORMAL_FRAGMENT_BUNDLE, bundle); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); context.startActivity(intent); } public static void startFragment(Context context, Class t, Bundle bundle) { Intent intent = new Intent(context, NormalActivity.class); intent.putExtra(NORMAL_FRAGMENT_NAME, t.getCanonicalName()); intent.putExtra(NORMAL_FRAGMENT_BUNDLE, bundle); context.startActivity(intent); } @Override protected int getLayoutId() { return R.layout.activity_normal; } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); if (getIntent() != null) { if (savedInstanceState == null) { handleIntent(getIntent()); } else { for (Fragment fragment : getSupportFragmentManager().getFragments()) { if (fragment instanceof NormalFragment) mTargetFragment = fragment; } } } } @Override protected void onNewIntent(Intent intent) { super.onNewIntent(intent); if (getIntent() != null) handleIntent(intent); } private void handleIntent(Intent intent) { String fraName = intent.getStringExtra(NORMAL_FRAGMENT_NAME); Bundle bundle = intent.getBundleExtra(NORMAL_FRAGMENT_BUNDLE); if (TextUtils.isEmpty(fraName)) { if (provideNormalIntent() == null) { return; } fraName = provideNormalIntent().getStringExtra(NORMAL_FRAGMENT_NAME); if (bundle == null) bundle = getIntent().getExtras(); if (TextUtils.isEmpty(fraName)) return; } mTargetFragment = getSupportFragmentManager().findFragmentByTag(fraName); if (mTargetFragment == null) { mTargetFragment = Fragment.instantiate(this, fraName, bundle); } getSupportFragmentManager().beginTransaction().replace(getFragmentPlaceholderId(), mTargetFragment, fraName).commitNowAllowingStateLoss(); } @Override public boolean onMenuItemClick(MenuItem item) { if (mTargetFragment instanceof NormalFragment) { ((NormalFragment) mTargetFragment).onMenuItemClick(item); } return super.onMenuItemClick(item); } @Override public void onBackPressed() { if (mTargetFragment instanceof NormalFragment && mTargetFragment.isAdded() && !((NormalFragment) mTargetFragment).onBackPressed()) { super.onBackPressed(); } } @Override public boolean dispatchTouchEvent(MotionEvent ev) { if (mTargetFragment instanceof NormalFragment) { ((NormalFragment) mTargetFragment).onTouchEvent(ev); } return super.dispatchTouchEvent(ev); } public Fragment getTargetFragment() { return mTargetFragment; } public int getFragmentPlaceholderId() { return R.id.normal_content; } }