Запуск действия с параметром
Я очень новичок в разработке Android.
Я хочу создать и начать работу, чтобы показать информацию об игре. Я показываю эту информацию, мне нужен gameId.
Как я могу передать этот идентификатор игры в действие? Идентификатор игры абсолютно необходим, поэтому я не хочу создавать или запускать действие, если у него нет идентификатора.
Это как деятельность получила только один конструктор с одним параметром.
Как я могу это сделать это?
спасибо.
5 ответов:
поставить
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");
просто добавьте дополнительные данные в намерение, которое вы используете для вызова своей активности.
в активности абонента :
Intent i = new Intent(this, TheNextActivity.class); i.putExtra("id", id); startActivity(i);
внутри onCreate () действия, которое вы вызываете:
Bundle b = getIntent().getExtras(); int id = b.getInt("id");
Edit: ой, Чарли Шин был быстрее.
мне нравится делать это со статическим методом во втором упражнении:
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");
существующие ответы (передайте данные в
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"); } }
Если вам нужно сгенерировать параметр для передачи в конструктор базового класса, просто замените жестко закодированное значение вызовом функции, которая возвращает правильное значение для передачи.
Котлин код:
начать
SecondActivity
:startActivity(Intent(context, SecondActivity::class.java) .putExtra(SecondActivity.PARAM_GAME_ID, gameId))
получить идентификатор в
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)