Как создать общий контекст активности?

У меня есть следующая часть кода, в которой мне нужно знать, из какого типа активности был передан контекст:

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, если контекст из этой активности?

Спасибо.

1
0
307
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Да, используйте абстрактный класс, расширяющий AppCompactActivity, а затем расширяйте его из всех действий и поместите этот код в абстрактный класс.

Пример:

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

И чем расширить BaseActivity из всех ваших классов. Когда вы переопределяете этот метод для каждого класса, делайте то, что вам нужно.

Но..... глядя на ваш код, это можно сделать без необходимости "общих действий"

Ответ принят как подходящий

Самый простой способ определить вашу предыдущую активность заключается в следующем:

Сделайте статическую переменную в вашей MainActivity или Constants.java следующим образом:

public static String passedContext = "MainActivity";

и во время запуска Activity установите для этой переменной имя текущего действия, например:

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

Опять же, вы можете проверить эту статическую переменную в любом месте приложения. Надеюсь, это поможет вам!

Другие вопросы по теме