2017-11-09 6 views
0

Sagen wir in Aktivität A (Score) Ich erstelle Instanzen meiner benutzerdefinierten Klasse Player. Wie kann ich diese Objekte an Aktivität C senden, ohne sie in Aktivität B (SelectGamemode) behandeln zu müssen? Dies ist, wie ich die Objekte über Parcel von Aktivität A nach B zu sendenSenden Sie Daten nicht zur nächsten Aktivität, sondern die nachher (mit parcelable)

btnNewRound = (Button) findViewById(R.id.btnNewRound); 
btnNewRound.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     Intent intent = new Intent(Score.this, SelectGamemode.class); 
     Bundle bundle = new Bundle(); 
     bundle.putParcelable("EXTRA_PLAYER_1", player1); 
     bundle.putParcelable("EXTRA_PLAYER_2", player2); 
     bundle.putParcelable("EXTRA_PLAYER_3", player3); 
     bundle.putParcelable("EXTRA_PLAYER_4", player4); 
     intent.putExtras(bundle); 
     startActivity(intent); 
    } 
}); 

Jetzt würde ich so meine Spieler Objekte in Aktion B zuzugreifen:

player1= (Player)getIntent().getParcelableExtra("EXTRA_PLAYER_1"); 

dann in Activity BI im Grunde der Verwendung würde Derselbe Code wie in Übung A, um die Player-Objekte an Aktivität C zu senden, obwohl ich nicht einmal die Objekte in Aktivität B verwende. Wie kann dies vermieden werden? Vielen Dank!

+0

Sie könnten gemeinsame Einstellungen oder Datenbanken verwenden? Und hol sie dir wann immer du willst. –

+0

gemeinsame Präferenzen oder Datenbank verwenden, oder übergeben Sie es durch die zweite Aktivität, vielleicht ohne es zu verwenden, und weiter zum dritten, auch wenn es offensichtlich weniger effizient ist – Daniele

+0

Ich werde die Datenbank ausprobieren, danke! – Kubi

Antwort

0

Es klingt wie Sie sich gerade diese Aktivität Fluss haben:

A -> B -> C 

Vielleicht eine bessere Strömung wäre:

A -> B 
B returns result to A 
A -> C 

ich von einigen kleinen Stückchen Ihrer Frage bin Extrapolation, aber es klingt wie Aktivität A hat die Aufgabe, Spieler zu erstellen, und Aktivität B hat die Aufgabe, Spielmodi auszuwählen. Dann nimmt die Aktivität C sowohl die Spieler als auch den ausgewählten Spielmodus und macht etwas mit ihnen. Hier einig Pseudo-Code, wie Sie meinen Vorschlag auf diese Situation anwenden könnten:

// in Activity A 
public void startChooseGameMode() { 
    Intent intent = new Intent(this, ActivityB.class); 
    startActivityForResult(intent, 123); // 123 is an example requestCode 
} 

public void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 

    if (reqeustCode == 123) { 
     if (resultCode == Activity.RESULT_OK) { 
      GameMode mode = data.getParcelableExtra("EXTRA_GAME_MODE"); 

      Intent intent = new Intent(this, ActivityC.class); 
      intent.putExtra("EXTRA_GAME_MODE", mode); 
      intent.putExtra("EXTRA_PLAYER_1", player1); 
      intent.putExtra("EXTRA_PLAYER_2", player2); 
      intent.putExtra("EXTRA_PLAYER_3", player3); 
      intent.putExtra("EXTRA_PLAYER_4", player4); 

      startActivity(intent); 
     } 
     else { 
      // handle the error/cancellation 
     } 
    } 
} 

// in Activity B 
public void chooseGameMode(GameMode mode) { 
    Intent data = new Intent(); 
    data.putExtra("EXTRA_GAME_MODE", mode); 

    setResult(Activity.RESULT_OK, data); 
    finish(); 
} 

In gewisser Weise ist dies das gleiche Problem wie Ihre ursprüngliche Frage, nur in einer anderen Richtung; Jetzt muss Aktivität A über das Ergebnis GameMode von Aktivität B verfügen, auch wenn es nicht direkt verwendet wird. Ich denke, das ist in Ordnung. Sie können sich vorstellen, dass Aktivität A dafür verantwortlich ist, alle Daten zu sammeln, die zum Starten von Aktivität C erforderlich sind. Vielleicht werden Sie in Zukunft Spieler auf andere Weise erstellen und diese Arbeit auf eine vierte Aktivität verlagern.

Verwandte Themen