2017-11-09 7 views
0

アクティビティA(スコア)では、カスタムクラスプレーヤのインスタンスを作成します。アクティビティB(SelectGamemode)でそれらのオブジェクトを処理する必要なしに、これらのオブジェクトをアクティビティCに送信するにはどうすればよいですか?これは私がBにアクティビティAからParcelable経由でオブジェクトを送信する方法であるデータは次のアクティビティではなく、後のアクティビティに送信します(パーセル化可能)

今、私はこのようなアクティビティBで私のプレーヤーのオブジェクトにアクセスする
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); 
    } 
}); 

:活動BIは基本的に使用するには次に

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

をアクティビティAと同じコードを使用して、アクティビティCにPlayerオブジェクトを送信しますが、アクティビティBのオブジェクトも使用しません。どのように回避できますか?ありがとうございました!

+0

共有設定またはデータベースを使用できますか?そして、いつでもあなたが望むものを手に入れることができます。 –

+0

共有環境設定やデータベースを使用するか、2番目のアクティビティを使用するかもしれません。使用しないでください。明らかに効率が悪い場合でも3番目のアクティビティに移動します。 – Daniele

+0

データベースを試してみます。 – Kubi

答えて

0

あなたは現在、この活動の流れを持っているようですね:

A -> B -> C 

おそらく、より良い流れは次のようになります。

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

私はあなたの質問のいくつかの小さなビットから外挿するんだけど、それが聞こえますアクティビティAのようにプレイヤーを作成し、アクティビティBにゲームモードを選ぶという仕事があります。次に、アクティビティCは選手と選択されたゲームモードの両方を受け取り、それらと共に何かを行います。ここでは、そのような状況に私の提案を適用することができる方法についていくつかの擬似コードです:いくつかの方法で

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

が、これは単に別の方向に、あなたの元の質問と同じ問題です。アクティビティAはアクティビティBの結果をGameModeについて知っている必要がありますが、アクティビティBは直接使用していません。これは大丈夫だと思います。アクティビティーAはアクティビティーCを開始するために必要なすべてのデータを収集する責任があると考えることができます。将来的にはプレーヤーを別の方法で作成し、その作業を第4アクティビティーにオフロードします。

関連する問題