onkeyDown / onBackPressed无法使用intent?

时间:2015-07-18 16:11:37

标签: java android android-intent onkeydown onbackpressed

这是一个简单的操作,似乎一直有效,直到我将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");
}

3 个答案:

答案 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);
    }
}