当前位置: 首页 > 知识库问答 >
问题:

从广播接收器启动父活动时,“后退”按钮和“向上”按钮不起作用

慕容烨
2023-03-14

我有一个广播接收器,它使用以下代码启动活动a

            Intent appIntent = new Intent(context, A.class);
              appIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK|Intent.FLAG_FROM_BACKGROUND);
              context.startActivity(appIntent);     

A活动启动正常,然后我按下一个按钮,使用此代码启动另一个活动B

            TaskStackBuilder tsb = TaskStackBuilder.create(this);
            tsb.addParentStack(this);
            Intent intent=new Intent(this, B.class);
            tsb.addNextIntent(intent);
            tsb.startActivities();              

活动B开始很好,但我按下后退按钮还是向上按钮活动A没有显示

这是清单字段中两个活动的定义

    <activity android:name=".A"  android:launchMode="singleTop"
        android:label="@string/app_name" >
    </activity>
    <activity android:name=".B" 
        android:label="@string/app_name" android:parentActivityName="myPackage.A">
        <meta-data
        android:name="android.support.PARENT_ACTIVITY"
        android:value="myPackage.A" />
    </activity>

在活动B中,我有以下代码

public void onCreate(Bundle savedInstanceState) 
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.simplelistlayout);
    getActionBar().setDisplayHomeAsUpEnabled(true);
}

@Override
public void onBackPressed() {
   moveTaskToBack(true); 
   B.this.finish();
}

@Override
public boolean onOptionsItemSelected(MenuItem item) 
{
    switch (item.getItemId()) 
    {
        // Respond to the action bar's Up/Home button
        case android.R.id.home:
            Intent upIntent = NavUtils.getParentActivityIntent(this);
            if (NavUtils.shouldUpRecreateTask(this, upIntent)) {
                TaskStackBuilder.create(this)
                        .addNextIntentWithParentStack(upIntent)
                        .startActivities();
            } else {
                NavUtils.navigateUpTo(this, upIntent);
            }
            return true;
    }
    return super.onOptionsItemSelected(item);
};

我试图调试,我认为问题是当我从广播接收器调用活动A时,FLAG_ACTIVITY_NEW_TASK导致意图同时具有动作(android.intent.action.主)和类别(android.intent.category.发射器),活动A不是我的发射器活动,所以当活动B收到后退动作或按下向上按钮时,我看到活动A的意图是正确的,但是有了启动器活动的动作和类别,我如何解决这个问题?

共有2个答案

麻茂材
2023-03-14

我在广播接收器中将呼叫改为活动A

Intent appIntent=new Intent(context, A.class);
appIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK|Intent.FLAG_ACTIVITY_CLEAR_TOP); 
context.startActivity(appIntent);

和对活动B的呼叫

Intent intent=new Intent(this, B.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);

现在它正在工作

干弘深
2023-03-14

如果在B中按BACK键,它将执行以下代码:

@Override
public void onBackPressed() {
   moveTaskToBack(true); 
   B.this.finish();
}

这会将任务移到后台,这就是为什么您不会看到活动A。您为什么要这样做?

 类似资料:
  • 我正在使用android 2.1,希望在Mapsavity上添加一个后退按钮。我在这一页上尝试了什么[在操作栏上显示后退按钮,但应用程序崩溃。我已经按照另一个论坛的建议将extends FragmentActivity替换为AppCompatActivity,但应用程序仍然崩溃。我知道这与操作栏有关,因为如果我删除它,应用程序就会工作。操作栏似乎为空。我被卡住了,已经启动了应用程序数次。下面是错误

  • 我有一个活动,当我的应用程序首次启动时开始(只有一次)。该活动允许用户选择主题。然后当他们按下完成键时,我完成了这项活动。这会将用户引导到主活动。但是当用户按下返回按钮时,它会返回到第一次启动的活动(我使用完成()关闭的活动)。但我想要的是,应用程序应该关闭时,用户按下返回按钮从主活动(总是)。我在两个类中都重写了onBackPress。 这两个类中的onBackPressed方法如下所示: 主活

  • 我有一个玩家活动和浮动玩家(服务),点击后退按钮后,玩家活动关闭,浮动玩家开始行动,当我点击浮动玩家时,我想回到玩家活动,但没有再次运行创建方法。 我在StackOver Flow中读到了很多解决方案,特别是使用FLAG\u ACTIVITY\u CLEAR\u TOP和FLAG\u ACTIVITY\u SINGLE\u TOP标志,或者将android:launchMode=“singleTa

  • 当使用Intent启动一个新活动时,活动顶部的栏是否会自动提供后退按钮?我假设它是这样工作的,但没有看到它。如果它没有自动出现,需要什么来使它出现?

  • 我目前正在处理一个Android项目,当用户在使用对话框主题的活动上按后退按钮时,我遇到了问题。 基本上,我有一个活动,让我们称之为我的活动,第二个活动使用@android: style/Theme.Holo.Dialog称为MyDialog。 当MyDialog活动显示在屏幕上时,活动对话框在对话中按预期启动,但当用户按下返回按钮时,对话框活动按预期关闭,但启动活动即MyActive似乎结束了,

  • 我正在使用Actionbar和它的“up”按钮从一个细节活动返回到主活动,这很好。类似地,用户可以按系统“后退”按钮返回到主活动。 在我的主要活动中,在中,从internet下载数据,以便在应用程序启动时显示。我注意到,当我使用Actionbar“up”按钮从细节转到主要活动时,运行,重新下载数据。但是当我使用系统“后退”按钮时,没有运行,因此立即显示主活动视图。 我在详细信息活动中用于实现“向上