我有代码的下一部分,我需要从中知道哪种类型的活动是通过上下文传递的:
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类型?
向你致敬。
答案 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。在每个类上使用该方法时,请执行所需的操作。
但是……查看您的代码,无需“常规活动”即可完成此操作