1

질문 시퀀스를 처리하는 클래스가 있습니다. 활동을 연장하지 않습니다.) 자식 활동을 내가부모 작업이 매개 변수로 비 활동 클래스의 인 텐트에 전달 될 때 onActivityResult가 finish()에 의해 호출되지 않습니다.

mQuizMaster.startQuiz(this, mModel); 

와 작업 활동에서이 메소드를 호출 내가 (이 끝나면

public class QuizMaster { 
    public void startQuiz(Activity activity, Model model) { 
     //switch - case statement using model 

     Intent intent = new Intent(activity, QuestionTextActivity.class) 
     activity.startActivityForResult(intent, requestCode); 

     //other case statements with other intents 
    } 
} 

가 :

Intent returnIntent = new Intent(); 
returnIntent.putExtra(ARG_SELECTED_CHECKBOX, checkedBox); 
setResult(RESULT_CODE, returnIntent); 
finish(); 

그것은 아무튼 클래스에서 방법이있다 상위 활동을 실행하지 않음

@Override 
protected void onActivityResult(final int requestCode, final int resultCode, final Intent data) { 
    Log.d(LOG_TAG, "OnActivityResult called in SignDetailsActivity. Resultcode is: "); 
} 

하지만 실제 부모 활동 파일에

Intent intent = new Intent(activity, QuestionTextActivity.class) 
activity.startActivityForResult(intent, requestCode); 

을 실행할 때, 그것은 onActivityResult를 방법을 실행한다.

활동이없는 클래스와 함께 보낸 경우 하위 활동이 상위 활동에서 onActivityResult를 실행하지 않는 이유는 무엇입니까? 이 문제를 어떻게 해결할 수 있습니까?

이와 같은 비 활동 클래스에서 새로운 Intent()를 실행할 때 동일한 문제가있는 사람을 찾지 못했습니다. 누군가가 있다면 올바른 검색 키워드를 사용하지 않았고 다른 일부는 내가 입력 한 것과 같은 형식으로이 페이지에 올 수 있습니다.

+1

새로운 의도는 당신은 당신의 코드 예제를 업데이트하십시오 수 있습니다 .. "startActivity를"또는 코드 "에 startActivityForResult"와 같은 무언가가 있어야 활동을 시작하지 않습니다 ? – Bmuig

+0

죄송합니다, 질문에 해당 코드 줄을 추가하는 것을 잊었습니다. – Janneman96

+0

이것은 7 개의 케이스를 가진 스위치로, 모두 다른 아이 클래스를 의도에 넣습니다. 하나를 선택하면 항상 4 개의 inent.putExtra 및 activity.startActivityForResult (intent, requestCode)가 수행됩니다. – Janneman96

답변

2

setResult (int)으로 전화해야 finish()으로 전화해야합니다. 이 활동 documentation에서입니다 :

활동 종료, 그것은 부모로 다시 데이터를 반환 setResult (int)를 호출 할 수 있습니다합니다. 결과 코드는 항상 표준 결과 RESULT_CANCELED, RESULT_OK 또는 RESULT_FIRST_USER부터 시작하는 모든 맞춤 값이 될 수 있습니다. 또한 선택적으로 을 반환하여 원하는 추가 데이터가 포함 된 인 텐트를 되돌릴 수 있습니다. 이 모든 정보는 원래 제공 한 정수 식별자와 함께 부모 Activity.onActivityResult(), 에 나타납니다. 여기

는 일을 내 구현입니다 :

MainActivity.java (부모 활동)

public class MainActivity extends AppCompatActivity { 

    private Sample sample; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     Button btn = (Button) findViewById(R.id.button); 
     btn.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       sample = new Sample(); 
       sample.startActivity(MainActivity.this); 
      } 
     }); 
    } 

    @Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     super.onActivityResult(requestCode, resultCode, data); 
     Log.d("TEST", "DONE"); 
    } 
} 

LaunchActivity.java (어린이 활동)

public class LaunchActivity extends AppCompatActivity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_launch); 

     Button btn = (Button) findViewById(R.id.button2); 
     btn.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       setIntent(new Intent()); 
       finish(); 
      } 
     }); 
    } 
} 

Sample.java (클래스 시작 활동)

public class Sample { 

    public Sample() {} 

    public void startActivity (Activity a) { 
     Intent it = new Intent(a, LaunchActivity.class); 
     a.startActivityForResult(it, 0); 
    } 

} 
+0

죄송합니다. 코드 조각을 추가하지 않았습니다. setResult를 호출했는데 지금 질문에 추가 할 것입니다. – Janneman96

+0

자식 활동을 변경하지 않고 .startQuiz (this, mModel)를 사용하여 부모 활동에서 호출 한 비 활동 클래스가 아닌 실제 부모 활동에서 호출하면 onActivityResult를 호출합니다 finish() – Janneman96

+0

재미 있습니다 ... onActivityResult 코드를 추가 할 수 있습니까? 왜냐하면 [this] (http://stackoverflow.com/questions/2848775/use-startactivityforresult-from-non-activity)에 따라 작동해야하기 때문입니다. – solosodium