如何创建通用活动上下文?

时间:2019-07-01 08:33:42

标签: android android-activity android-context

我有代码的下一部分,我需要从中知道哪种类型的活动是通过上下文传递的:

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活动变得通用?如果上下文来自此活动,要将活动更改为ClientActivity类型?

向你致敬。

2 个答案:

答案 0 :(得分:3)

检测先前活动的最简单方法如下:

像这样在您的MainActivity或Constants.java中创建静态变量:

public static String passedContext="MainActivity";

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

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

现在您可以检查任何变量,就像这样

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

要使其更通用,现在可以在其onPause设置值中将父活动创建为父活动,并从该父扩展其他所有活动,就像这样

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

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

答案 1 :(得分:1)

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

示例:

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

然后从所有类中扩展BaseActivity。在每个类上使用该方法时,请执行所需的操作。

但是……查看您的代码,无需“常规活动”即可完成此操作