Запуск операции с параметром

Я очень новичок в разработке Android.

Я хочу создать и начать действие, чтобы показать информацию об игре. Я показываю эту информацию, в которой мне нужен gameId.

Как я могу передать этот ID игры в действие? Идентификатор игры абсолютно необходим, поэтому я не хочу создавать или запускать действие, если оно не имеет идентификатора.

Он, как и активность, имеет только один конструктор с одним параметром.

Как я могу это сделать?

Спасибо.

Ответ 1

Поместите 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:

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

Ответ 2

Просто добавьте дополнительные данные в намерение, которое вы используете для вызова своей деятельности.

В активности вызывающего абонента:

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

Внутри функции onCreate() вы вызываете:

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

Изменить: К сожалению, Чарли Шин был быстрее.

Ответ 3

Мне нравится делать это со статическим методом во втором действии:

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

Ответ 4

Существующие ответы (передача данных в 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");
    }
}

Если вам нужно сгенерировать параметр для перехода к конструктору базового класса, просто замените твердокодированное значение вызовом функции, который возвращает правильное значение для передачи.