我对 Android 开发非常陌生。
我想创建并启动一项活动以显示有关游戏的信息。我显示我需要一个gameId的信息。
如何将此游戏 ID 传递给活动?游戏 ID 是绝对必要的,所以如果没有 ID,我不想创建或启动活动。
就像活动只有一个带有一个参数的构造函数。
我怎样才能做到这一点?
谢谢。
我对 Android 开发非常陌生。
我想创建并启动一项活动以显示有关游戏的信息。我显示我需要一个gameId的信息。
如何将此游戏 ID 传递给活动?游戏 ID 是绝对必要的,所以如果没有 ID,我不想创建或启动活动。
就像活动只有一个带有一个参数的构造函数。
我怎样才能做到这一点?
谢谢。
将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");
只需向用于调用活动的 Intent 添加额外数据。
在调用者活动中:
Intent i = new Intent(this, TheNextActivity.class);
i.putExtra("id", id);
startActivity(i);
在您调用的活动的 onCreate() 内部:
Bundle b = getIntent().getExtras();
int id = b.getInt("id");
我喜欢在第二个活动中使用静态方法:
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");
科特林代码:
启动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
}
}
在哪里(可以为空gameId)String?
现有答案(将数据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");
}
}
如果您需要生成要传递给基类构造函数的参数,只需将硬编码的值替换为返回要传递的正确值的函数调用即可。