310

私はAndroid開発に非常に慣れていません。

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

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

これは、アクティビティに1つのパラメーターを持つコンストラクターが1つしかないようなものです。

どうやってやるの?

ありがとう。

4

5 に答える 5

537

intあなたのIDであるanを新しいに入れてください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();

次に、新しい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 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

私は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");
于 2015-03-05T16:16:05.177 に答える
5

Kotlinコード:

開始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? (nullにすることができます)

于 2018-08-13T11:04:28.770 に答える
3

既存の回答(に渡されたデータを渡すIntentstartActivity()は、この問題を解決する通常の方法を示しています。別のアプリ(たとえば、 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");
    }
}

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

于 2014-08-27T01:49:25.723 に答える