310

我对 Android 开发非常陌生。

我想创建并启动一项活动以显示有关游戏的信息。我显示我需要一个gameId的信息。

如何将此游戏 ID 传递给活动?游戏 ID 是绝对必要的,所以如果没有 ID,我不想创建或启动活动。

就像活动只有一个带有一个参数的构造函数。

我怎样才能做到这一点?

谢谢。

4

5 回答 5

537

intwhich 是您的 id 放入新的Intent.

Intent intent = new Intent(FirstActivity.this, SecondActivity.class);
Bundle b = new Bundle();
b.putInt("key", 1); //Your id
intent.putExtras(b); //Put your id to your next Intent
startActivity(intent);
finish();

然后在你的 new 中获取 id Activity

Bundle b = getIntent().getExtras();
int value = -1; // or other values
if(b != null)
    value = b.getInt("key");
于 2010-10-12T10:35:56.330 回答
132

只需向用于调用活动的 Intent 添加额外数据。

在调用者活动中:

Intent i = new Intent(this, TheNextActivity.class);
i.putExtra("id", id);
startActivity(i);

在您调用的活动的 onCreate() 内部:

Bundle b = getIntent().getExtras();
int id = b.getInt("id");
于 2010-10-12T10:37:27.517 回答
41

我喜欢在第二个活动中使用静态方法:

private static final String EXTRA_GAME_ID = "your.package.gameId";

public static void start(Context context, String gameId) {
    Intent intent = new Intent(context, SecondActivity.class);
    intent.putExtra(EXTRA_GAME_ID, gameId);
    context.startActivity(intent);
}

@Override
protected void onCreate(Bundle savedInstanceState) {
    ... 
    Intent intent = this.getIntent();
    String gameId = intent.getStringExtra(EXTRA_GAME_ID);
}

然后从您的第一个活动(以及其他任何地方)开始,您只需执行以下操作:

SecondActivity.start(this, "the.game.id");
于 2015-03-05T16:16:05.177 回答
5

科特林代码:

启动SecondActivity

startActivity(Intent(context, SecondActivity::class.java)
    .putExtra(SecondActivity.PARAM_GAME_ID, gameId))

获取 ID SecondActivity

class CaptureActivity : AppCompatActivity() {

    companion object {
        const val PARAM_GAME_ID = "PARAM_GAME_ID"
    }

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        val gameId = intent.getStringExtra(PARAM_GAME_ID)
        // TODO use gameId
    }
}

在哪里(可以为空gameIdString?

于 2018-08-13T11:04:28.770 回答
3

现有答案(将数据Intent传递给传递给startActivity())显示了解决此问题的正常方法。还有另一种解决方案可以在您创建将由另一个应用程序启动的活动(例如,Tasker插件中的一个编辑活动)的奇怪情况下使用,因此不控制Intent启动Activity.

您可以创建一个Activity具有带参数的构造函数的基类,然后创建具有默认构造函数的派生类,该构造函数调用具有值的基类构造函数,如下所示:

class BaseActivity extends Activity
{
    public BaseActivity(String param)
    {
        // Do something with param
    }
}

class DerivedActivity extends BaseActivity
{
    public DerivedActivity()
    {
        super("parameter");
    }
}

如果您需要生成要传递给基类构造函数的参数,只需将硬编码的值替换为返回要传递的正确值的函数调用即可。

于 2014-08-27T01:49:25.723 回答