Începe o Activitate cu un parametru

Am'm foarte nou pe Android de dezvoltare.

Vreau pentru a crea și de a începe o activitate pentru a afișa informații despre un joc. Am arătat că informațiile de care am nevoie de un gameId.

Cum pot trece de acest joc ID de activitate? ID-ul de joc este absolut necesar deci eu nu't doriți să creați sau de a începe activitatea, dacă nu't au ID-ul.

L's place activitatea are numai o constructor cu un singur parametru.

Cum pot face asta?

Multumesc.

Soluția

Pune o int care este id-ul dvs. într-o nouă "Intenția".

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

Apoi ia id-ul in noua ta "Activitate":

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

Trebuie doar să adăugați date suplimentare de Intenție utilizați pentru a apela dumneavoastră de activitate.

În apelantul activitate :

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

În interiorul onCreate() din activitatea de apel :

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

Edit : Oops, Charlie Sheen a fost mai rapid.

Comentarii (3)

Îmi place să o fac cu o metodă statică în cea de-a doua activitate:

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

Apoi, de la prima activitate (și de oriunde altundeva), tu doar faci:

SecondActivity.start(this, "the.game.id");
Comentarii (6)

Existente răspunsuri (trece datele în "Intenția" a trecut la startActivity()) show mod normal de a rezolva această problemă. Nu există o altă soluție, care poate fi folosit în caz ciudat în cazul în care te're creând o Activitate care va fi inițiat de către o altă aplicație (de exemplu, unul de editare activități într-o Tasker plugin) și, prin urmare, nu de control "Intenția" care lansează "Activitate".

Puteți crea o bază de clasă "Activitate" care are un constructor cu un parametru, atunci o clasă derivată, care are un constructor implicit care solicită bază-clasa constructor cu o valoare, astfel:

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

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

Dacă aveți nevoie pentru a genera parametru pentru a trece la bază-clasa constructor, pur și simplu înlocuiți hard-coded valoare cu un apel de funcție care returnează valoarea corectă pentru a trece.

Comentarii (0)

Kotlin cod:

Începe SecondActivity:

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

Ia Id-ul 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
    }
}

unde gameId "este" String?` (poate fi null)

Comentarii (0)