2014-06-11 3 views
0

활동의 데이터를 Next Activity : [Intent.putExtra(key, value);] (으)로 보내는 방법을 알고 있습니다.다른 활동의 추가 된 데이터로 MainActivity로 돌아 가기

활동에서 이전 활동으로 돌아가서 데이터를 포함하는 방법도 알고 있습니다 : [see this stackoverflow answer].

그러나 내가 알고 싶은 것은 어떻게 홈 활동으로 돌아가서 데이터를 포함 할 수 있는지입니다. 예를 들어 :

  1. 나는 활동 A의 응용 프로그램을 시작하고 그 다음
  2. 내가 활동 B에 가서 물건을하고 다음
  3. 내가 활동 C에 가서 물건을하고 물건을
  4. 그리고 나는 내가 onResume (또는으로 돌아 다른 방법)에서 일반적으로 다른 무언가를 할 4 단계에서

을 (다른 물건을하고 할) 활동 A를 반환 할, 그래서 포함 데이터는 boolean 형의 키 (바람직하게는 intent.putExtra("myKey", true); (또는 실패한 경우 false)). onResume에서 나는 다음과 같이 수행

@Override 
protected void onResume(){ 
    super.onResume(); 
    if(intent.getExtras() != null && intent.getAction().toString().equals("myKey")){ 
     if(intent.getExtras().getBoolean("myKey")){ 
      // do something else (step 4) on success 
     } 
     else{ 
      // do something else (step 4) on fail 
     } 
    } 
    else{ 
     // Do regular stuff I normally do in the onResume() 
    } 
} 

확인을, 나는 내 문제를 해결 한 것 같아요. 내 HomeActivity는 이미 BroadcastReceiver입니다. 따라서 방영을 사용하여 마지막 활동에서 내 HomeActivity로 인 텐트를 보냅니다.

작동 여부를 테스트합니다. 나는 내가 다른 활동에 참여할 때가 될지 의심 스럽지만. (내 HomeActivity는 브로드 캐스트 리시버 내가 보내야만 물론 AsyncTasks있는, 결과를 필요로 한 일부 HTTP를 요청을 이미 있습니다.) 나는 이미 아니에요 때

좋아,이 작동하지 않습니다 MainActvity. 당신은 모든 데이터를 채워 주시기이 의도에

public final void setResult (int resultCode, Intent data)

: 그래서 더 제안을 환영합니다 ..

+0

SharedPreferences에 새 작업 값을 저장 한 다음 MainActivity에서 해당 작업을 확인하면? – Aiapaec

+0

@El_Mochiq 또한 가능성이 있습니다. 그렇지만 여전히 MainActivity로 돌아가는 것이 가장 좋은 방법인지 묻는 질문이 나에게 남습니다. MainActivity가 이미 시작되어 이제는 일시 중지 된 상태이므로 'startActivity (new Intent (...));'는 좋지 않습니다. –

답변

1

좋아, 나는 (의 대답과 onNewIntent에 대한 Budius 주석을 shimi_tab도 감사) 솔루션을 발견했습니다

내 활동 C에서

I 반환 할 내 활동 A의

Intent home = new Intent(this, A.class); 
home.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT); 
home.putExtra("myKey", true); 
startActivity(home); 

을 :

// This allows us to use getIntent to get the latest intent, instead of the first Intent used in the onCreate 
@Override 
protected void onNewIntent(Intent intent) { 
    super.onNewIntent(intent); 
    setIntent(intent); 
} 

@Override 
protected void onResume(){ 
    super.onResume(); 

    if(getIntent().getExtras() != null && getIntent().getExtras().getBoolean("myKey")){ 
     // Do something else after returning from C 
    } 
    else{ 
     // Do regular things on a normal onResume (like back from B or Settings) 
    } 
} 

주 (원래의 질문에 사소한) : 내 경우에는 내가 구글 서비스에서 사용하는 내 활동 A, 내가 googleApiClient.onConnect();onStart() 방법에 있었다.그래서, 나는 또한하여 onConnected() 방법에 다음을 추가했다 : 당신은 "A"상태 적은 활동을해야한다

@Override 
public void onConnected(Bundle b){ 
    Bundle extras = getIntent().getExtras(); 
    if(extras == null || (extras != null && !extras.getBoolean("myKey"))){ 
     // Do regular stuff 
    } 
    else{ 
     // Do something else after we returned from C 
    } 
} 
1

는 호출 활동에 다시 데이터를 넣어, 당신은이 방법을 사용합니다 너는 필요해. 다음과 같이 활동 결과 방법은 다음과 같습니다

protected void onActivityResult (int requestCode, int resultCode, Intent data)

은 그래서 당신이 결과에 넣어 동일한 데이터입니다.

+0

이전의 활동 대신에 임의의 일시 중지 된 활동 (본인의 경우 홈 활동)으로가는 것에 대해 알았습니다. –

+0

내 경우에이 작업을하려면 다음과 같이해야합니다. startActivityForResult를 사용하여 Activity A에서 B로 이동 한 다음 startActivityForResult를 다시 사용하여 B에서 C로 이동 한 다음 onPause 및 onDestroy에서 setResult를 사용합니다. 그런 다음 onActivityResult를 A와 B에 추가합니다. (BI에서 자동으로 onPause 및 onDestroy의 setResult와 함께 자동 완성됩니다.) 그래서 Activity A의 onActivityResult에 도착합니다. 실제로 다른 방법은 없습니다 : S –

+0

맞습니다. 저는 영어로 설명하는 것이 많은 일을하는 것 같지만 솔직히 말해서 자바에서는 단지 몇 줄의 코드 일뿐입니다. – Budius

1

. FLAG_ACTIVITY_CLEAR_TOP 플래그로 새로운 의도로 활동 'A'를 다시 호출하십시오.

Intent intent = new Intent(this, A.class); 
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
startActivity(intent); 

그리고 원하는 모든 데이터.

ActivityResult에서 수행하려는 작업을 중계하지 마십시오.

+0

이 작업을 시도했지만 onResume 대신 MainActivity의 onCreate로 반환됩니다. if (Intent-boolean)를 onRemote 대신에 onCreate에 추가해야합니까, 아니면 onCreate 대신 onResume으로 이동하는 방법이 있습니까? –

관련 문제