2010-12-22 5 views
16

이것은 2 일 동안 나를 죽이고 있습니다. 두 번째 Activity B를 호출하는 주 Activity A가 있습니다. Activity B는 사용자에게 listview를 제공하기 만합니다. 목록보기에서 항목을 누르면 몇 개의 문자열을 기본 활동 A로 다시 전달하고 Activiy B가 완료되기를 원합니다.Android onActivityResult는 항상 0입니다.

문제점은 항상 resultcode가 0이고 데이터 번들이 null입니다. 나는 이것이 왜 일어나고 있는지 정말로 이해하지 못한다.

여기 내 코드입니다.

결과를 보려면 활동 B를 시작하십시오.

Test.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      Intent i = new Intent(recipeActivity.this, BrowseLoadRecipes.class); 
      startActivityForResult(i, RECIPE_CHOOSER); 
    } 
    }); 

이렇게하면 두 번째 활동 벌금이 시작됩니다. 활동 B는 목록보기를 채우고 항목을 클릭하면 통화 활동 A로 일부 데이터를 다시 보내려고합니다.

지금은 모든 텍스트가 있으므로 활동 B에서 다음을 사용했습니다.

 lv.setOnItemClickListener(new OnItemClickListener() { 
    @Override 
    public void onItemClick(AdapterView<?> a, View v, int position, long id) { 
     Bundle bundle = new Bundle(); 
     bundle.putString("TEXT", "Please work... pleeeeaasee"); 
     Intent mIntent = new Intent(); 
     mIntent.putExtras(bundle); 
     setResult(RESULT_OK, mIntent); 
     finish(); 
    } 
    }); 

호출 활동에서 나는 다음과 같이 리턴을 듣습니다.

protected void onActivityResult(int requestCode, int resultCode, 
     Intent data) { 
      switch(requestCode) { 
      //TODO 
      case RECIPE_CHOOSER: 
       Toast.makeText(getApplicationContext(), "In recipe return", Toast.LENGTH_SHORT).show(); 
       Toast.makeText(getApplicationContext(), "resultCode is " + String.valueOf(resultCode), Toast.LENGTH_SHORT).show(); 
       if (resultCode == RESULT_OK) { 
       Bundle b = getIntent().getExtras(); 

       Toast.makeText(getApplicationContext(), "Returned " + b.getString("TEXT"), Toast.LENGTH_LONG).show(); 
       } 
       if (resultCode == RESULT_CANCELED) { 

        } 
       break; 

       } 
      } 
     } 

요청 코드가 올바르게 반환되었지만 resultcode는 항상 0이며 데이터는 항상 null입니다.

나는 디버그를 돌았고 setResult는 작업을 수행하고 있으며 번들에는 실제로 전달하는 데이터가 있지만 길을 따라 어느 지점에서 손실됩니다.

매니 페스트에 뭔가가 누락되었거나 뭔가 있습니다. 지금까지이 프로젝트에 대한 나의 진전이 죽었습니다.

도움이된다면 정말 감사하겠습니다.

감사합니다, 딘 목록 활동에서

답변

15

의와 setResult 라인을 대체하는 다음과 같은 시도 onItemClickListener : 나는 당신이 필요로하는 무슨 인 부모 활동이 있는지 궁금하네요

if (getParent() == null) { 
    setResult(Activity.RESULT_OK, data); 
} 
else { 
    getParent().setResult(Activity.RESULT_OK, data); 
} 

데이터를 바인딩하고 결과를 설정하십시오 ....

+0

나는 이것이 효과가 있다고 생각한다. 나는 지금 그것을 시도하고 5 분 안에 다시 당신에게 돌아갈 것입니다. 답장을 보내 주셔서 감사합니다. – Dean

+3

데이브 ... 내가 너와 함께 있으면 지금 너를 사랑스러운 차가운 파인트 한벌 사줄거야. 그것은 완벽하게 작동했습니다. 다시 한 번 감사드립니다 ... – Dean

+1

이것에 대해 생각한 후, 지금 내 원래 코드가 작동하지 않는 이유를 알았습니다. 처음에 실행하려는 의도 (활동 B)는 실제로 단지 두 개의 다른 탭 (두 번째 탭은 웹에있는 파일을 볼 수있는 첫 번째 탭)에서 두 개의 인 텐트를 시작하는 전면 탭 소유자 의도입니다. 주요 반환 의도는 매우 첫 번째 의도 였을 것입니다. 따라서 Daves의 우수한 답변을 통해 부모님 께 다시 되돌아 오는 이유를 알 수 있습니다. 나는 오늘 살았다. – Dean

5

반환 된 데이터에 관한.

당신은 수행

Bundle b = getIntent().getExtras(); 

하지만 "getIntent()는"이 활동을 시작 텐트를 반환합니다. 당신은 당신이 결과를 시작 활동에서 반환 된 데이터를 원하는 경우 , 단지

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

귀하의 코드가 완벽하게 작동되어 전달되는 데이터를 ........ 가지고

in u Activity B 
use 
    setResult(0, mIntent);insted of setResult(RESULT_OK, mIntent); 
in your Activity A: 
use 
case 0: insted case RECIPE_CHOOSER: and 
use System.out.println(b.getString("TEXT")); 

출력은

으로하십시오.pleeeeaasee

+6

그것은 문제를 마스킹하고 있습니다 , 정말. 0은 RESULT_OK가 아닌 RESULT_CANCELED 열거 형의 값입니다. 결과 코드 세트가없는 작업 B (finish() 호출시)의 반환 값은 자동으로 RESULT_CANCELED로 설정됩니다. – jaseelder