저는 안드로이드 개발이 처음입니다.
게임에 대한 정보를 표시하는 활동을 만들고 시작하고 싶습니다. 해당 정보를 표시하려면 게임아이디가 필요합니다.
이 게임 ID를 활동에 전달하려면 어떻게 해야 하나요? 게임 ID는 반드시 필요하므로 ID가 없는 활동을 만들거나 시작하고 싶지 않습니다.
활동에는 매개 변수가 하나뿐인 생성자가 하나만 있는 것과 같습니다.
어떻게 해야 하나요?
고마워요.
새 '인텐트'에 아이디인 'int'를 입력합니다.
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");
편집 : 죄송합니다, 찰리 쉰이 더 빨랐네요.
I like to do it with a 정적임 방법으로 두 번째 활동.
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");
기존 답변(startActivity()
에 전달된 Intent
의 데이터를 전달)은 이 문제를 해결하는 일반적인 방법을 보여줍니다. 다른 앱(예: Tasker 플러그인의 편집 활동 중 하나)에 의해 시작될 활동을 생성하여 '활동'을 시작하는 '인텐트'를 제어하지 않는 이상한 경우에 사용할 수 있는 또 다른 해결책이 있습니다.
매개 변수가 있는 생성자가 있는 기본 클래스 Activity
를 만든 다음 값을 사용하여 기본 클래스 생성자를 호출하는 기본 생성자가 있는 파생 클래스를 만들 수 있습니다:
class BaseActivity extends Activity
{
public BaseActivity(String param)
{
// Do something with param
}
}
class DerivedActivity extends BaseActivity
{
public DerivedActivity()
{
super("parameter");
}
}
기본 클래스 생성자에 전달할 매개 변수를 생성해야 하는 경우 하드 코딩된 값을 전달할 올바른 값을 반환하는 함수 호출로 바꾸면 됩니다.
'세콘디스티비티 시작합니다.':
startActivity(Intent(context, SecondActivity::class.java)
.putExtra(SecondActivity.PARAM_GAME_ID, gameId))
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
}
}
여기서 '가미드' 는 '구체화하십시오?' (널일 수 있습니다)