137 lines
4.7 KiB
Java
137 lines
4.7 KiB
Java
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<? extends NormalActivity> cls, Class<? extends NormalFragment> 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<? extends NormalActivity> cls, Class<? extends NormalFragment> t) {
|
||
Intent intent = new Intent(context, cls);
|
||
intent.putExtra(NORMAL_FRAGMENT_NAME, t.getCanonicalName());
|
||
return intent;
|
||
}
|
||
|
||
|
||
public static void startFragmentNewTask(Context context, Class<? extends NormalFragment> 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<? extends NormalFragment> 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;
|
||
}
|
||
}
|