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");
}
4

3 回答 3

1

问题在于使用存储上下文的可序列化对象,该对象在下一个活动中将为空,这会导致异常,这会使我的活动崩溃。所以我删除了它一切正常。谢谢@克里斯福克斯

于 2015-07-19T01:23:32.227 回答
1

添加android:noHistory="true"到清单文件中的活动 A 和 B。这样,这些活动就不会出现在您的后台堆栈中。在活动 B 中,您必须覆盖onBackPressed(). 它必须看起来像这样:

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

如果你离开super.onBackPressed()你的方法,就会发生默认行为,即 Activity B 将被关闭,然后你跳回 Activity A。

于 2015-07-18T16:43:22.657 回答
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>

活动一:

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);
    }
}
于 2015-07-18T18:30:43.173 回答