putExtra和getIntExtra发生了有趣的事情

时间:2014-09-10 13:38:26

标签: android

我正在开发一款游戏,在我的菜单屏幕上,我有一系列按钮,可以让玩家进入不同级别的游戏。我已经使用putExtra和getIntExtra从菜单活动中获取Int到游戏活动,然后设置游戏级别。

这一切都运行得很好,我遇到的问题是当使用“后退”按钮返回菜单活动时,你必须按两次才能进入菜单而不是一次。如果你点击它一次,它会达到与getIntExtra函数的默认Int相对应的水平。

我不确定为什么会这样做。

任何建议都将受到赞赏。

- 编辑 -

在菜单活动

 public void onGoToGame1Click(View view) {

    Intent getNameScreenIntent = new Intent(this, GameActivity.class);

    final int result = 1;
    startActivityForResult(getNameScreenIntent, result);

    getNameScreenIntent.putExtra( "int", 1);
    startActivity(getNameScreenIntent);
}

在游戏活动中

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.game_layout);

    levelTV = (TextView) findViewById(R.id.level);

    Intent getNameScreenIntent = getIntent();
    level = getNameScreenIntent.getIntExtra("int", 1);

    levelTV.setText(" " + level);

}

private void levelUpdate() {

    switch (score) {

        case 10:
            level = 2;
            break;
        case 20:
            level = 3;
            break;
        case 30:
            level = 4;
            break;
        case 40:
            level = 5;
            break;
}

2 个答案:

答案 0 :(得分:0)

您同时使用startActivityForResult()startActivity(),因此您的活动将启动两次。 第一次没有额外的,第二次有额外的。

你应该选择其中一个。仅当您需要活动在完成时返回结果时才应使用startActivityForResult()

旁注: startActivityForResult()的第二个参数不是结果。这是一个请求代码,允许调用者在收到onActivityResult()的回调时知道哪个请求得到了回答。

答案 1 :(得分:0)

为什么要使用这一行?

 startActivityForResult(getNameScreenIntent, result);

因为你通过使用上面的startActivity()来启动两个活动,你最终得到两个GamingActivities,一个在另一个之上。当您使用后退按钮时,您将关闭上部,应用程序将显示您启动的其他活动。如果要使用Extra,则应仅使用startActivity()。