gpt4 book ai didi

android - TaskStackBuilder 未按预期工作

转载 作者:行者123 更新时间:2023-11-30 01:55:48 26 4
gpt4 key购买 nike

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

总结一下。我想要的是:

  1. 点击通知
  2. 打开 NotificationsActivity
  3. 按返回键
  4. 打开主 Activity

但我得到的是:

  1. 点击通知
  2. 打开 NotificationsActivity
  3. 按返回键
  4. 退出应用

相关代码如下所示。

来自 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 的答案中,我必须支持操作栏上的后退按钮。这是处理它的代码。我从 Skizo 提供的方法覆盖和下面的代码中调用“goBack”。

@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();
}

最佳答案

只需重写 NotificationsActivity 上的 onBackPressed()

复制粘贴此方法:

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

关于android - TaskStackBuilder 未按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32258274/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com