Как создать общий контекст деятельности? - PullRequest
0 голосов
/ 01 июля 2019

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

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

Есть ли способ сделать это упражнение общим? Чтобы изменить действие на тип ClientActivity, если контекст относится к этому действию?

Спасибо.

Ответы [ 2 ]

3 голосов
/ 01 июля 2019

Самый простой способ определить ваше предыдущее действие:

Сделать статическую переменную в вашем 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 установить значение для текущего класса Name, как это

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

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

1 голос
/ 01 июля 2019

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

Пример:

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

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

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

...