2017-11-09 15 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와 같은 코드를 사용하여 액티비티 B에있는 객체를 사용하지는 않지만 플레이어 객체를 액티비티 C로 보냅니다. 어떻게 피할 수 있습니까? 고맙습니다!

A -> B -> C 

은 아마도 더 나은 흐름은 다음과 같습니다 :

+0

공유 설정 또는 데이터베이스를 사용할 수 있습니까? 언제든지 원하면 얻을 수 있습니다. –

+0

공유 환경 설정 또는 데이터베이스를 사용하거나 두 번째 활동을 통해 사용하지 않을 수도 있습니다 (사용하지 않고, 세 번째 작업까지). 분명히 효율성이 떨어지더라도 – Daniele

+0

데이터베이스를 사용해 보겠습니다. – Kubi

답변

0

그것은 당신이 현재이 작업 흐름을 가지고있는 것처럼 소리 나는 질문의 일부 작은 비트에서 외삽있어

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

을하지만 소리 Activity A와 같이 플레이어를 만드는 작업이 있고 Activity 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에 대해 알아야합니다. 직접 사용하지 않더라도 마찬가지입니다. 나는 이것이 괜찮다고 생각한다. 활동 A는 활동 C를 시작하는 데 필요한 모든 데이터를 수집하는 책임이 있다고 생각할 수 있습니다 ... 미래에는 다른 방법으로 플레이어를 만들고 해당 작업을 네 번째 활동으로 내릴 수 있습니다.