TaskStackBuilder没有按预期工作

时间:2015-08-27 19:51:34

标签: android

我尝试做的是在Android中创建一个通知,只要点击它就会打开一个活动。此活动称为" NotificationsActivity"它的父母是" MainActivity"。每当向用户呈现NotificationsActivity时,我希望他们能够按下后退按钮以进入MainActivity。我一直在使用这里的说明(http://developer.android.com/guide/topics/ui/notifiers/notifications.html#DirectEntry)来尝试让它发挥作用。但是,无论我尝试什么,每当我从NotificationsActivity按回来时,应用程序都会完全退出。我能想到的唯一问题是我的应用程序有一个登录屏幕,我还将其识别为MAIN和LAUNCHER。我不认为这会导致问题,但这是我能想到的全部。

总结一下。我想要的是:

  1. 点按通知
  2. 打开NotificationsActivity
  3. 按返回
  4. 打开MainActivity
  5. 但我得到的是:

    1. 点按通知
    2. 打开NotificationsActivity
    3. 按返回
    4. 退出应用
    5. 相关代码显示如下。

      来自AndroidManifest.xml:

      <activity
          android:name=".LoginActivity"
          android:label="@string/app_name"
          android:launchMode="singleTop"
          android:noHistory="true" >
          <intent-filter>
              <action android:name="android.intent.action.MAIN" />
              <category android:name="android.intent.category.LAUNCHER" />
          </intent-filter>
      </activity>
      <activity
          android:name=".MainActivity"
          android:label="@string/app_name">
          <intent-filter>
              <action android:name="android.intent.action.MAIN" />
          </intent-filter>
      </activity>
      <activity
          android:name=".NotificationsActivity"
          android:parentActivityName=".MainActivity" >
          <meta-data
              android:name="android.support.PARENT_ACTIVITY"
              android:value=".MainActivity" />
      </activity>
      

      这是我的Java代码:

      private void notifyRecordChanges(){
          String notificationText = "test notification";
          Context context = this;
      
          NotificationCompat.Builder builder =
                  new NotificationCompat.Builder(context)
                          .setSmallIcon(R.drawable.ic_notify)
                          .setAutoCancel(true)
                          .setContentText(notificationText);
          // Creates an explicit intent for an Activity in your app
          Intent resultIntent = new Intent(context, NotificationsActivity.class);
          TaskStackBuilder stackBuilder = TaskStackBuilder.create(context);
          // Adds the back stack for the Intent (but not the Intent itself)
          stackBuilder.addParentStack(NotificationsActivity.class);
          // Adds the Intent that starts the Activity to the top of the stack
          stackBuilder.addNextIntent(resultIntent);
          PendingIntent resultPendingIntent =
                  stackBuilder.getPendingIntent(0, PendingIntent.FLAG_UPDATE_CURRENT);
          builder.setContentIntent(resultPendingIntent);
          NotificationManager notificationManager =
                  (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
      
          notificationManager.notify(1, builder.build());
      }
      

      编辑:我从项目中删除了LoginActivity类,它没有任何区别。所以,现在我不知道我做错了什么。

      第二次编辑: 要添加到Skizo的答案,我必须支持操作栏上的后退按钮。这是处理它的代码。我打电话给#34; goBack&#34;来自Skizo提供的方法覆盖和下面的代码。

      @Override
      public boolean onOptionsItemSelected(MenuItem item) {
          switch(item.getItemId()){
              case android.R.id.home:
                  goBack();
                  break;
          }
          return super.onOptionsItemSelected(item);
      }
      private void goBack(){
          Intent intent = new Intent(getApplicationContext(), MainActivity.class);
          startActivity(intent);
          finish();
      }
      

1 个答案:

答案 0 :(得分:1)

只需覆盖onBackPressed()上的NotificationsActivity

复制并粘贴此方法:

@Override
public void onBackPressed() {
 // super.onBackPressed();  
 Intent intent = new Intent(getApplicationContext(), MainActivity.class);
 startActivity(intent);
 finish();
}