2014-11-25 56 views
1

我有一个包含通知的应用程序。我想在选择通知后设置“返回”导航行为。我有两个活动:MainActivity和GoogleFormActivity。通知启动GoogleFormActivity,我希望后退按钮返回到MainActivity。我试图this无济于事。这里是我的代码:通知后的后退导航

的Manifest.xml:

<activity 
     android:name="com.ican.activities.MainActivity" 
     android:label="@string/app_name" > 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 

      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 

<activity 
     android:name="com.ican.activities.GoogleFormActivity" 
     android:label="@string/title_activity_google_form" 
     android:parentActivityName="com.ican.activities.MainActivity" > 
     <!-- Parent activity meta-data to support 4.0 and lower --> 
     <meta-data 
      android:name="android.support.PARENT_ACTIVITY" 
      android:value="com.ican.activities.MainActivity" /> 
    </activity> 

下面是当选择我的通知代码:

Intent resultIntent = new Intent(this, GoogleFormActivity.class); 

    TaskStackBuilder stackBuilder = TaskStackBuilder.create(this). 
      addParentStack(GoogleFormActivity.class). 
      addNextIntent(resultIntent); 
    PendingIntent resultPendingIntent = 
      stackBuilder.getPendingIntent(0, PendingIntent.FLAG_UPDATE_CURRENT); 
    mBuilder.setContentIntent(resultPendingIntent); 

    NotificationManager mNotificationManager = 
      (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); 
    // mId allows you to update the notification later on. 
    int mId = 1; 
    mNotificationManager.notify(mId, mBuilder.build()); 

至于我可以告诉大家,这看起来完全像Android文档。但是当GoogleFormActivity启动后,当我按回时,应用会导航到应用程序的主屏幕。我不明白发生了什么事。有任何想法吗?我不得不道歉。这个昨天没有工作的代码现在可以工作。我发誓Android Studio上有一些东西。这是第二次或第三次发生这种事情。

回答

0

当您点击back button它将关闭当前活动。这意味着它不会开展任何活动。只是关闭当前的活动。活动排列在stack (the back stack)中,按照每个活动打开的顺序排列。如果用户按下Back button,则当前活动从堆栈弹出并销毁。如果堆栈包含该活动,则堆栈中的上一个活动恢复。当活动被销毁时,系统不保留活动的状态。所以,当你来自通知时,你只会打开一个活动。它不会回到主要活动,因为它没有打开。您必须使用Intent导航到特定活动。 docs

+0

我想我不明白你在说什么。 “开始活动时保留导航”文章说我应该能够返回到MainActivity。 – mhlandry 2014-11-25 04:35:05

+0

这些活动按照每个活动打开的顺序排列在一个“堆栈(后退堆栈)”中。如果用户按下“返回按钮”,则当前活动从堆栈弹出并销毁。如果堆栈包含该活动,则堆栈中的上一个活动恢复......请阅读此内容,但仍不理解让我知道。 – 2014-11-25 04:37:59

+0

我明白你在说什么。但是当我看到“开始活动时保留导航”时,我看到:“来自Gmail应用程序的通知证明了这一点。当您单击一封电子邮件的通知时,您会看到该消息本身。 Gmail转到主屏幕,就像您从主屏幕输入Gmail一样,而不是从通知中输入Gmail。“而且,我似乎应该能够完成我想要的。 – mhlandry 2014-11-25 04:42:48

0
@Override 
     public void onBackPressed() { 
      // TODO Auto-generated method stub 
      super.onBackPressed(); 
      Intent intent=new Intent(this,MainActivity.class); 
      startActivity(intent); 
      finish(); 
     } 

在GoogleFormActivity添加此

0

尝试这样做,

getFragmentManager().popBackStack(); 
fm.beginTransaction().add(R.id.main, newFragment).addToBackStack("fragBack").commit();