web-dev-qa-db-ja.com

パラメータでアクティビティを開始する

私はAndroid開発についてはとても新しいです。

ゲームに関する情報を表示するアクティビティを作成して開始したいです。私はgameIdが必要であるという情報を示します。

このゲームIDをアクティビティに渡す方法は?ゲームIDは絶対に必要なので、IDがなければアクティビティを作成したり開始したりしたくありません。

これは、アクティビティが1つのパラメータを持つoneコンストラクタだけを持っているようなものです。

どうやってやるの?

ありがとう。

271
VansFannel

あなたのIDであるintを新しい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();

それからあなたの新しいActivityでIDをつかみます:

Bundle b = getIntent().getExtras();
int value = -1; // or other values
if(b != null)
    value = b.getInt("key");
459
Wroclai

アクティビティを呼び出すために使用するインテントにデータを追加するだけです。

発信者のアクティビティでは:

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

あなたが呼び出すアクティビティのonCreate()の内側:

Bundle b = getIntent().getExtras();
int id = b.getInt("id");

編集:おっと、チャーリーシーンは早くなった。

115
DavGin

2番目のアクティビティでは、静的メソッドを使用してこれを行うのが好きです。

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");
38
pomber

既存の回答(startActivity()に渡されたIntentにデータを渡す)は、この問題を解決するための通常の方法を示しています。他のアプリによって開始されるActivity(たとえば Tasker プラグインの編集アクティビティの1つ)を作成するという奇妙な場合に使用できる別の解決策があります。 Intentを起動するActivityを制御しないでください。

次のように、パラメータを持つコンストラクタを持つ基本クラスActivity、次に値を持つ基本クラスコンストラクタを呼び出すデフォルトコンストラクタを持つ派生クラスを作成できます。

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

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

基本クラスのコンストラクタに渡すパラメータを生成する必要がある場合は、ハードコードされた値を、渡す正しい値を返す関数呼び出しに置き換えてください。

3
Trebor Rude

コトリンコード:

SecondActivityを起動します。

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

SecondActivityでIDを取得します。

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?(nullでも可)

1
Francis