onKeyDown / onBackPressed与Intent一起使用无效?

3
这是一项简单的操作,似乎一直在工作,直到我将我的minSdk从8更改为9,而targetSdk仍然在我的清单中保持21。
问题是我有一个活动A,当按下活动A中的按钮时,我要去的活动B。现在在活动B上,每当有人按下返回按钮时,我想清除活动堆栈并将我的活动B转移到活动C。但它会完成活动B并转到活动A,到目前为止,我尝试了onKeyDown,onBackPressed,没有任何作用,请帮忙解决。
活动A(在onClick方法中):
Intent in = new Intent(A.this,
                            B.class);
in.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP
                            | Intent.FLAG_ACTIVITY_SINGLE_TOP);
startActivity(in);

[已更新]B 活动:

@Override
public void onBackPressed() {
    Intent in = new Intent(this, C.class);
    Bundle bundle = new Bundle();
    bundle.putSerializable("Scores", score);

    in.putExtras(bundle);

    startActivity(in);
}

活动 C:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.C);
    ScoreSaver scores = (ScoreSaver) getIntent().getExtras().getSerializable("Scores");
}
3个回答

1
问题出在可序列化的对象上,它使用存储上下文,而上下文在下一个活动中将为空,这导致异常,从而使我的活动崩溃。所以我把它移除了,现在一切都很好。感谢@Chris Fox

1
在您的清单文件中,将android:noHistory="true"添加到Activity A和B中。这样这些活动就不会出现在您的返回堆栈中。 在Activity B中,您需要覆盖onBackPressed()的行为。 它应该像这样:
@Override
public void onBackPressed() {
    Intent intent = new Intent(this, ActivityC.class);
    startActivity(intent);
}

如果您在方法中保留 super.onBackPressed(),则会发生默认行为,即 Activity B 将被关闭,您将返回到 Activity A。

现在,如果我在B活动中按下返回按钮,整个应用程序都会关闭。 - user1953449
哦,抱歉。我设置了一个测试项目,它可以工作 :-/ - Chris Fox
你能把你的源代码上传到某个地方并给我链接吗?那会很有帮助。 - user1953449

0

很遗憾,我没有Git账户,所以我在这里发布文件内容。(应用程序的主题继承自Theme.AppCompat.Light.DarkActionBar

清单:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="fox.chris.activitytest">

<application android:allowBackup="true"
             android:label="@string/app_name"
             android:icon="@mipmap/ic_launcher"
             android:theme="@style/AppTheme">

    <activity
        android:name=".ActivityA"
        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=".ActivityB"
        android:noHistory="true">

    </activity>
    <activity android:name=".ActivityC">

    </activity>

</application>
</manifest>

活动 A:

public class ActivityA extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_a);
        Button button = (Button) findViewById(R.id.button);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(ActivityA.this, ActivityB.class);
                startActivity(intent);
            }
        });
    }
}

活动 B:

public class ActivityB extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_b);
    }

    @Override
    public void onBackPressed() {
        Intent intent = new Intent(this, ActivityC.class);
        startActivity(intent);
    }
}

活动 C:

public class ActivityC extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_c);
    }
}

你没有包含可序列化对象传输的代码行,我已经包含了,这意味着这些行导致了这个问题吗?那么可能是什么原因呢? - user1953449

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接