簡體   English   中英

無法為活動創建后台堆棧

[英]Unable to create back stack for activities

我收到一個通知,我想創建一個自定義的Back Stack,以便用戶可以瀏覽它。但是到目前為止,單擊通知會打開所需的活動,但是當我按下Back按鈕時,它會完全退出該應用程序。

Intent resultIntent = new Intent(this, NotifViewActivity.class);
    resultIntent.putExtra(StringHolder.NOTIFICATION_ID, notif.getId());

    TaskStackBuilder stackBuilder = TaskStackBuilder.create(this);
    stackBuilder.addParentStack(HomeActivity.class);
    stackBuilder.addParentStack(NotifActivity.class);
    stackBuilder.addNextIntent(resultIntent);
    PendingIntent resultPendingIntent = stackBuilder.getPendingIntent(0, PendingIntent.FLAG_UPDATE_CURRENT);

    NotificationCompat.Builder notificationCompat = new NotificationCompat.Builder(context)
            .setAutoCancel(true)
            .setContentTitle(notif.getTitle())
            .setSmallIcon(R.drawable.ic_launcher)
            .setContentIntent(resultPendingIntent);

清單文件

<activity
        android:name=".NotifActivity"
        android:parentActivityName=".HomeActivity">
        <meta-data
            android:name="android.support.PARENT_ACTIVITY"
            android:value=".HomeActivity" />
    </activity>
    <activity
        android:name=".NotifViewActivity"
        android:parentActivityName=".NotifActivity">
        <meta-data
            android:name="android.support.PARENT_ACTIVITY"
            android:value=".NotifActivity" />
    </activity>

我希望它的工作方式是,在單擊通知時,將用戶轉到NotifViewActivity,然后在按下后退按鈕時,將用戶轉到NotifActivity,而當再次按下后退按鈕時,將用戶轉到 HomeActivity。正在嘗試創建,我該怎么做?

您應該以這種方式構建任務堆棧:

    stackBuilder.addParentStack(HomeActivity.class);
    stackBuilder.addParentStack(NotifActivity.class);
    stackBuilder.addNextIntentWithParentStack(resultIntent);

或者實際上是因為您已經在清單中指定了活動層次結構,所以只需一行即可完成:

   stackBuilder.addNextIntentWithParentStack(resultIntent);

或者另一種無需在manifest中指定層次結構即可將其歸檔的方法:

    Intent mainActivityIntent = new Intent(this, HomeActivity.class);
    Intent notifActivityIntent = new Intent(this, NotifActivity.class);
    stackBuilder.addNextIntent(mainActivityIntent);
    stackBuilder.addNextIntent(notifActivityIntent);
    stackBuilder.addNextIntent(resultIntent);

對於嘗試使用TaskStackBuilder啟動那些創建的活動的任何人,請遵循@Divers解決方案,然后使用taskStackBuilder.startActivities()

試試這個:將下面的代碼放入NotifViewActivity

 @Override
        public void onBackPressed() {
            Intent i = new Intent(this, HomeActivity.class);
        i.putExtra("exit", true);
        i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
        startActivity(i);
        super.onBackPressed();
        }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM