如何创建通用 activity 上下文?

How create a generic activity context?

我有下一部分代码,我需要知道上下文是从什么类型的 activity 传递的:

Activity activity;

        if (mContext instanceof ClientActivity) {
            activity = ((ClientActivity) mContext);
        } else if (mContext instanceof LoginActivity) {
            ((LoginActivity) mContext).onBackPressed();
        } else if (mContext instanceof OnBoardingActivity) {
            ((OnBoardingActivity) mContext).onBackPressed();
        } else if (mContext instanceof HomeActivity) {
            ((HomeActivity) mContext).onBackPressed();
        } else {
            ((Activity) mContext).onBackPressed();
        }

有没有办法让这个 Activity activity 成为通用的?如果上下文来自此 activity?

,则将 activity 更改为 ClientActivity 类型

谢谢你。

是的,使用抽象 class 扩展 AppCompactActivity,而不是从所有活动中扩展它,并将此代码放在抽象 class.

示例:

 abstract class BaseActivity extends AppCompactActivity{
 public abstract void handleBackPressed();
     }

然后从所有 classes 扩展 BaseActivity。当您在每个 class 上验证该方法时,请执行您需要的操作。

但是......看看你的代码,这不需要 "generic activities"

检测您以前的 activity 的最简单方法如下:

在 MainActivity 或 Constants.java 中创建静态变量,如下所示:

public static String passedContext="MainActivity";

并在启动期间 Activity 将该变量设置为当前 activity 名称,例如:

Intent intent = new Intent(this, Next.class);
MainActivity.passedContext = "Main";
startActivity(intent);

现在您可以像这样检查变量 any-were

if(MainActivity.passedContext.equals("Main")){
//Do Something
}

为了让它更通用创建父级 Activity 并从该父级扩展所有其他父级,现在将其 onPause 设置值设置为当前 class 名称这样

@Override
    protected void onPause() {
        MainActivity.passedContext = this.getClass().getCanonicalName(); //Or use any other method to get activityName
        super.onPause();
    }

同样,您可以在应用程序的任何位置检查该静态变量。 希望对您有所帮助!