Files
assistant-android/app/src/main/java/com/gh/gamecenter/NormalActivity.java

137 lines
4.7 KiB
Java
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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;
}
}