1

質問シーケンスを処理するクラスがあります。アクティビティは拡張されません。クラスのメソッドがあります:親アクティビティが非アクティビティクラスのインテントにパラメータとして渡されたときに、onActivityResultがfinish()によって呼び出されない

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 
    } 
} 

私は

mQuizMaster.startQuiz(this, mModel); 

で作業活動からこのメソッドを呼び出すと、私は(終了したら)子アクティビティ:

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

それはdoesnの親アクティビティを実行しないでください

@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つのケースを持つスイッチで、すべてが異なる子クラスをインテントに入れます。 1つを選択すると、常に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-nonactivity)に従って動作する必要があるためです。 – solosodium

関連する問題