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(); 

它不執行母公司的活動

@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

當一個Activity退出,它可以調用的setResult(int)以數據傳回 返回其父。它必須始終提供結果代碼,可以是標準結果RESULT_CANCELED,RESULT_OK或從RESULT_FIRST_USER開始的任何自定義值 。另外,它可以選擇返回一個包含任何想要的附加數據的Intent。所有這些 信息與其最初提供的整數標識符一起出現在父級的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完成() – Janneman96

+0

這很有趣...你可以添加你的onActivityResult代碼嗎?因爲它應該根據[this](http://stackoverflow.com/questions/2848775/use-startactivityforresult-from-non-activity)工作。 – solosodium

相關問題