Rozpocznij działanie z parametrem

Jestem nowy w rozwoju Androida.

Chcę utworzyć i rozpocząć działanie, aby pokazać informacje o grze. Pokazuję, że potrzebuję gameId.

Jak mogę przekazać ten identyfikator gry do aktywności? Identyfikator gry jest absolutnie niezbędny, więc nie chcę tworzyć ani rozpoczynać aktywności, jeśli nie ma identyfikatora.

To tak jakby działanie miało tylkojeden konstruktor z jednym parametrem.

Jak mogę to zrobić?

Dzięki.
Author: VansFannel, 2010-10-12

5 answers

Umieść int, który jest Twoim id w Nowym 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();

Następnie pobierz id w swoim nowym Activity:

Bundle b = getIntent().getExtras();
int value = -1; // or other values
if(b != null)
    value = b.getInt("key");
 424
Author: Wroclai,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-05-04 13:37:30

Po prostu dodaj dodatkowe dane do celu, którego używasz do wywołania swojej aktywności.

W aktywności rozmówcy:

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

Wewnątrz OnCreate () wywołanej aktywności :

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

Edit : UPS, Charlie Sheen był szybszy.

 109
Author: DavGin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-10-12 10:37:27

Lubię to robić metodą statyczną w drugim ćwiczeniu:

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

Wtedy z pierwszej aktywności (i gdziekolwiek indziej) po prostu robisz:

SecondActivity.start(this, "the.game.id");
 33
Author: pomber,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-11-11 17:07:40

Istniejące odpowiedzi (przekazywanie danych w Intent przekazane do startActivity()) pokazują normalny sposób rozwiązania tego problemu. Istnieje inne rozwiązanie, które może być użyte w dziwnym przypadku, gdy tworzysz aktywność, która zostanie uruchomiona przez inną aplikację (na przykład jedna z czynności edycyjnych w wtyczce Tasker) i dlatego nie kontroluj Intent, która uruchamia Activity.

Możesz utworzyć klasę bazową Activity, która ma konstruktor z parametrem, a następnie klasę pochodną, która ma domyślny konstruktor, który wywołuje konstruktor klasy bazowej z wartością, tak jak:

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

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

Jeśli chcesz wygenerować parametr do przekazania konstruktorowi klasy bazowej, po prostu zastąp kodowaną na twardo wartość wywołaniem funkcji, które zwraca poprawną wartość do przekazania.

 3
Author: Trebor Rude,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-08-27 01:49:25

Kod Kotlina:

Rozpocznij SecondActivity:

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

Get the Id in 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
    }
}

Gdzie gameId jest String? (może być null)

 0
Author: Francis Novotný,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-08-13 11:04:28