Arhn - архитектура программирования

Android: flag_activity_reorder_to_front работает для startActivity, но не работает для уведомления

Я хочу изменить порядок действия A на передний план при нажатии на уведомление, и будет только один экземпляр действия A.

например:
Сейчас у меня запущено 3 активности в таком порядке: Главная->А->Б

Теперь я щелкнул уведомление и запустил Activity A,
и я ожидаю, что порядок стека должен быть: Main->B->A

Однако у меня получилось: Main->A->B->A

Каков был бы правильный подход к этому?

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    public void onClick(View view) {
        Common.onClick(this, view);
    }
}


public class ActivityA extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    public void onClick(View view) {
        Common.onClick(this, view);
    }
}


public class ActivityB extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    public void onClick(View view) {
        Common.onClick(this, view);
    }
}


public class Common {

    public static void onClick(Activity activity, View view) {
        Intent intent;
        switch (view.getId()) {
            //new activity anyway
            case R.id.btnA:
                intent = new Intent(activity, ActivityA.class);
                activity.startActivity(intent);
                break;
            case R.id.btnB:
                intent = new Intent(activity, ActivityB.class);
                activity.startActivity(intent);
                break;
            //reorder activity to front
            case R.id.btnAF:
                intent = new Intent(activity, ActivityA.class);
                intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
                activity.startActivity(intent);
                break;
            case R.id.btnBF:
                intent = new Intent(activity, ActivityB.class);
                intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
                activity.startActivity(intent);
                break;
            //new activity anyway through notification
            case R.id.btnNA:
                intent = new Intent(activity, ActivityA.class);
                sendNotification(activity, intent, "New A", "New A");
                break;
            case R.id.btnNB:
                intent = new Intent(activity, ActivityB.class);
                sendNotification(activity, intent, "New B", "New B");
                break;
            //reorder activity to front through notification
            case R.id.btnNAF:
                intent = new Intent(activity, ActivityA.class);
                intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
                sendNotification(activity, intent, "A to Front", "A to Front");
                break;
            case R.id.btnNBF:
                intent = new Intent(activity, ActivityB.class);
                intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
                sendNotification(activity, intent, "B to Front", "B to Front");
                break;
        }
    }

    private static void sendNotification(Activity activity, Intent targetIntent, String title, String msg) {
        NotificationCompat.Builder mBuilder =
                new NotificationCompat.Builder(activity)
                        .setSmallIcon(R.drawable.abc_ic_menu_copy_mtrl_am_alpha)
                        .setContentTitle(title)
                        .setContentText(msg);

        TaskStackBuilder stackBuilder = TaskStackBuilder.create(activity);

        stackBuilder.addNextIntent(targetIntent);
        PendingIntent resultPendingIntent =
                stackBuilder.getPendingIntent(
                        0,
                        PendingIntent.FLAG_UPDATE_CURRENT
                );
        mBuilder.setContentIntent(resultPendingIntent);
        NotificationManager mNotificationManager =
                (NotificationManager) activity.getSystemService(Context.NOTIFICATION_SERVICE);

        mNotificationManager.notify(123456789, mBuilder.build());
    }
}


<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_weight="1"
        android:orientation="vertical">

        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="Activity" />

        <Button
            android:id="@+id/btnA"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:onClick="onClick"
            android:text="New A" />

        <Button
            android:id="@+id/btnB"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:onClick="onClick"
            android:text="New B" />

        <Button
            android:id="@+id/btnAF"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:onClick="onClick"
            android:text="A to Front" />

        <Button
            android:id="@+id/btnBF"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:onClick="onClick"
            android:text="B to Front" />
    </LinearLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_weight="1"
        android:orientation="vertical">

        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="Notification" />

        <Button
            android:id="@+id/btnNA"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:onClick="onClick"
            android:text="N New A" />

        <Button
            android:id="@+id/btnNB"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:onClick="onClick"
            android:text="N New B" />

        <Button
            android:id="@+id/btnNAF"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:onClick="onClick"
            android:text="N A to Front" />

        <Button
            android:id="@+id/btnNBF"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:onClick="onClick"
            android:text="N B to Front" />
    </LinearLayout>
</LinearLayout>


Новые материалы

Коллекции публикаций по глубокому обучению
Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

Представляем: Pepita
Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

Советы по коду Laravel #2
1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

3 способа решить квадратное уравнение (3-й мой любимый) -
1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

Создание VR-миров с A-Frame
Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

Демистификация рекурсии
КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..