这是一个简单的操作,似乎一直有效,直到我将minSdk = 8更改为,并且我的清单中的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");
}
答案 0 :(得分:1)
将android:noHistory="true"
添加到清单文件中的活动A和B。这样,这些活动就不会在你的后台。
在活动B中,您必须覆盖onBackPressed()
的行为。
它看起来像这样:
@Override
public void onBackPressed() {
Intent intent = new Intent(this, ActivityC.class);
startActivity(intent);
}
如果您在方法中保留super.onBackPressed()
,则会发生默认行为,即活动B将关闭,您将跳回活动A.
答案 1 :(得分:1)
问题出在Serializable对象上,该对象正在使用存储上下文,该对象在下一个活动中将为null,这会导致异常,从而导致我的活动崩溃。所以我删除它一切正常。谢谢@Chris Fox
答案 2 :(得分: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);
}
}