使用参数启动活动

Van*_*nel 282 android oncreate android-activity

我是Android开发的新手.

我想创建并开始一项活动来显示有关游戏的信息.我展示了我需要一个gameId的信息.

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

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

我怎样才能做到这一点?

谢谢.

Wro*_*lai 487

int你的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();
Run Code Online (Sandbox Code Playgroud)

然后抓住新的id Activity:

Bundle b = getIntent().getExtras();
int value = -1; // or other values
if(b != null)
    value = b.getInt("key");
Run Code Online (Sandbox Code Playgroud)

  • 没有必要创建一个新的Bundle(如果你做[文档](http://developer.android.com/reference/android/content/Intent.html#putExtras%28android.os.Bundle%29)说你必须"使用包名称来为你的键添加前缀."只需使用`intent.putExtra(String,Int)`. (52认同)
  • 在开始抓取它之前,您可能需要确保b!= null (42认同)
  • B可为空,可以说你要开始另外一个地方这个活动,你做它的标准方式,没有PARAMS.它会抛出一个NPE.你应该总是认为这个参数是可选的. (3认同)
  • 有人可能会争辩说,最好不要进行空检查。https://en.wikipedia.org/wiki/Fail-fast。 (2认同)

Dav*_*Gin 120

只需将额外数据添加到您用来调用活动的Intent中.

在调用者活动中:

Intent i = new Intent(this, TheNextActivity.class);
i.putExtra("id", id);
startActivity(i);
Run Code Online (Sandbox Code Playgroud)

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

Bundle b = getIntent().getExtras();
int id = b.getInt("id");
Run Code Online (Sandbox Code Playgroud)

编辑:哎呀,查理辛更快.


pom*_*ber 38

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

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);
}
Run Code Online (Sandbox Code Playgroud)

然后从您的第一个活动(以及其他任何地方),您只需:

SecondActivity.start(this, "the.game.id");
Run Code Online (Sandbox Code Playgroud)

  • 这使我的代码更清洁.谢谢. (4认同)

Fra*_*cis 5

科特林代码:

开始SecondActivity

startActivity(Intent(context, SecondActivity::class.java)
    .putExtra(SecondActivity.PARAM_GAME_ID, gameId))
Run Code Online (Sandbox Code Playgroud)

获取 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
    }
}
Run Code Online (Sandbox Code Playgroud)

其中gameIdString? (可以为空)