2013-02-27 25 views
0

我的問題是這樣的:當我按下通知時,有些活動已打開,可以說活動編號爲3.但是當我按下後退按鈕時,我由android導航到菜單。我想要做的是保持用戶的正確導航體驗,當我按下後退按鈕時,它會將我帶到活動編號2,當我按下後退按鈕時,它將帶我到活動編號1,等等。
我的另一個問題是,當我打開活動編號2時,我需要在目標中設置一些額外的數據,但我不知道如何設置它。
我的問題總結:保留用戶的正確導航,並設置一些額外的活動,將通過後退按鈕單擊打開。單擊通知時保留回來的活動

這裏是我的通知碼:

NotificationCompat.Builder mBuilder = 
       new NotificationCompat.Builder(this) 
       .setSmallIcon(R.drawable.ic_launcher) 
       .setContentTitle("New Question") 
       .setContentText("" + CurrentQuestion.getAuthor().getUserName() + ": " + CurrentQuestion.getQuestion() + ""); 

     Intent openHomePageActivity = new Intent("com.example.ihelp.HOMEPAGEACTIVITY"); 
     TaskStackBuilder stackBuilder = TaskStackBuilder.create(this); 
     stackBuilder.addNextIntent(openHomePageActivity); 
     PendingIntent resultPendingIntent = 
       stackBuilder.getPendingIntent(
        0, 
        PendingIntent.FLAG_UPDATE_CURRENT 
       ); 
     mBuilder.setContentIntent(resultPendingIntent); 
     NotificationManager mNotificationManager = 
      (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); 
     mNotificationManager.notify(0, mBuilder.build()); 

謝謝!

+0

覆蓋onBackPressed()方法做的,添加的代碼,將導航到期望的活動 – Ajit 2013-02-27 12:47:08

+0

但是,這不會做題?因爲當我按下後退按鈕時,它將進入已停止的最後一個活動。但是如果我按後退按鈕並重寫onBackPressed(),它會爲我開啓一個新的活動,而不會恢復已停止的最後一個活動。而這並不是我每次按下後退按鈕時都會發生的事情。 – 2013-02-27 13:00:13

+0

我會嘗試下一個選項:通過按通知您將打開活動編號1,但隨後立即轉到編號2,然後立即轉到然後通過點擊活動編號3的'返回'按鈕,他會回到活動編號2。唯一需要注意的是,在這種情況下,所有的用戶界面資料都不會創建爲1號活動&2.我很確定,由於速度的原因,用戶不會覺得他在開放3號之前就已經進入了活動1和2。 – sromku 2013-02-27 14:14:31

回答

0

將您需要的參數保存在onSaveInstanceState中&將它們返回到onRestoreInstanceState中。這樣,如果您的活動也被任何其他通知暫停,那也無關緊要。

+0

你能告訴我一些代碼嗎?所以我會更好地理解它。我應該在哪裏放置這個功能? – 2013-02-27 14:07:43

+0

請參考這裏的例子:http://stackoverflow.com/questions/151777/saving-activity-state-in-android – 2013-02-27 15:10:30

0

任何人在相同的情況下都可以使用我在我的應用程序中使用的解決方案。 覆蓋onBackPressed(在您的活動從通知路由),並檢查您的應用程序是否在堆棧中。如果沒有,那麼開始你的根活動。用戶可以隨時根據您的根活動進行導航。這是我在我的應用程序

@Override 
public void onBackPressed() { 
    if (isTaskRoot()) { 
     Intent intent = new Intent(this,YourMainActivity.class); 
     startActivity(intent); 
     super.onBackPressed(); 
    }else { 
     super.onBackPressed(); 
    } 
}