Android startActivity ForResultとsetResultの違い
3780 ワード
Android startActivity ForResultとsetResultの違い
startActivity ForResultとstartActivityの違いは、次の点です.
1、startActivity( )
ターゲットページにジャンプするだけで、現在のページに戻るにはstartActivity()をもう一度使用する必要があります.
2、startActivityForResult( )
このタスクは、プログラムがこのコードに実行されると、T 1 Activityから次のText 2 Activityにジャンプし、このText 2 Activityがfinish()メソッドを呼び出すと、プログラムは自動的にT 1 Activityにジャンプし、前のT 1 ActivityのonActivity()メソッドを呼び出すことができます.
関連関数:
簡単な例:
1.ジャンプの場合はstartActivity(intent)ではなくstartActivity ForResult(intent,0)
2.onActivity Resultメソッドを書き換え、Bエコーのデータを受信する.
3.Bでデータを再送する場合はsetResultメソッドを使用し、その後finishメソッドを呼び出す.
Android activityのsetResult()がいつ呼び出されるか(ポイントも難点)
startActivity ForResultで起きたActivityにsetResultを設定すると、結果はすぐにparentのActivityに戻らず、現在のActivityだけがfinishされ、結果はparentのonActivity Resultに送られて処理されます!
activityが起動したactivityにデータを返す場合は、setResult()メソッドを呼び出すことができます.では、setResult()メソッドを呼び出してデータを返すのはいつですか?ソースコードを見ればわかります.
このコードからactivityがresultを返すのはfinishによって返される場合,すなわちsetResult()メソッドを呼び出すにはfinish()の前にしなければならないことがわかる.
では、setResult()を次の方法で呼び出すと、成功に戻らない可能性があります.onPause()、onStop()、onDestroy()
これらのメソッド呼び出しはfinishの前にあるとは限らないので、もちろんonCreate()でsetResultを呼び出すのはfinishの前にあるに違いない.
BACKキーを押してActivityから退いた場合、BACKを押すとandroidはActivityのfinish()メソッドを自動的に呼び出し、resultCodeをRESULT_に設定します.CANCELEEDは、何のデータも返さない.
解決策は、ActivityでBACKを押すイベントをキャプチャし、キャプチャしてからsetResult、それから自分でfinishを呼び出せば済む…BACKをそのまま自分で飲み込む
もちろんonCreate()でsetResultを呼び出すこともできますが、onBackPressed()を書き換える方法はないと思います.
以上がAndroid startActivity ForResultとsetResultの違いです.質問があれば、伝言を残したり、当駅のコミュニティで交流したりしてください.読んでくれてありがとう.助けてほしいです.当駅のサポートに感謝します.
startActivity ForResultとstartActivityの違いは、次の点です.
1、startActivity( )
ターゲットページにジャンプするだけで、現在のページに戻るにはstartActivity()をもう一度使用する必要があります.
2、startActivityForResult( )
このタスクは、プログラムがこのコードに実行されると、T 1 Activityから次のText 2 Activityにジャンプし、このText 2 Activityがfinish()メソッドを呼び出すと、プログラムは自動的にT 1 Activityにジャンプし、前のT 1 ActivityのonActivity()メソッドを呼び出すことができます.
関連関数:
startActivityForResult(Intent intent, Int requestCode)
setResut(int resultCode, Intent intent)
onActivityResult(int requestCode, int resultCode, Intent intent)
簡単な例:
1.ジャンプの場合はstartActivity(intent)ではなくstartActivity ForResult(intent,0)
Intent intent=new Intent();
intent.setClass(A.this, B.class);
Bundle bundle=new Bundle();
String str1="aaaaaa";
bundle.putString("str1", str1);
intent.putExtras(bundle);
startActivityForResult(intent, 0);// startActivityForResult , 0 , , >=0
2.onActivity Resultメソッドを書き換え、Bエコーのデータを受信する.
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
switch (resultCode) { //resultCode , B RESULT_OK
case RESULT_OK:
Bundle b=data.getExtras(); //data B Intent
String str=b.getString("str1");//str
break;
default:
break;
}
}
3.Bでデータを再送する場合はsetResultメソッドを使用し、その後finishメソッドを呼び出す.
setResult(RESULT_OK, intent); //intent A Bundle intent, Bundle
finish();// finish()
Android activityのsetResult()がいつ呼び出されるか(ポイントも難点)
startActivity ForResultで起きたActivityにsetResultを設定すると、結果はすぐにparentのActivityに戻らず、現在のActivityだけがfinishされ、結果はparentのonActivity Resultに送られて処理されます!
activityが起動したactivityにデータを返す場合は、setResult()メソッドを呼び出すことができます.では、setResult()メソッドを呼び出してデータを返すのはいつですか?ソースコードを見ればわかります.
public final void setResult(int resultCode, Intent data) {
synchronized (this) {
mResultCode = resultCode;
mResultData = data;
}
}
public void finish() {
if (mParent == null) {
int resultCode;
Intent resultData;
synchronized (this) {
resultCode = mResultCode;
resultData = mResultData;
}
if (Config.LOGV) Log.v(TAG, "Finishing self: token=" + mToken);
try {
if (ActivityManagerNative.getDefault()
.finishActivity(mToken, resultCode, resultData)) {
mFinished = true;
}
} catch (RemoteException e) {
// Empty
}
} else {
mParent.finishFromChild(this);
}
}
このコードからactivityがresultを返すのはfinishによって返される場合,すなわちsetResult()メソッドを呼び出すにはfinish()の前にしなければならないことがわかる.
では、setResult()を次の方法で呼び出すと、成功に戻らない可能性があります.onPause()、onStop()、onDestroy()
これらのメソッド呼び出しはfinishの前にあるとは限らないので、もちろんonCreate()でsetResultを呼び出すのはfinishの前にあるに違いない.
BACKキーを押してActivityから退いた場合、BACKを押すとandroidはActivityのfinish()メソッドを自動的に呼び出し、resultCodeをRESULT_に設定します.CANCELEEDは、何のデータも返さない.
解決策は、ActivityでBACKを押すイベントをキャプチャし、キャプチャしてからsetResult、それから自分でfinishを呼び出せば済む…BACKをそのまま自分で飲み込む
@Override
public void onBackPressed() {
Log.i(TAG, "onBackPressed");
setResult(Const.LIVE_OK);
super.onBackPressed();
}
もちろんonCreate()でsetResultを呼び出すこともできますが、onBackPressed()を書き換える方法はないと思います.
以上がAndroid startActivity ForResultとsetResultの違いです.質問があれば、伝言を残したり、当駅のコミュニティで交流したりしてください.読んでくれてありがとう.助けてほしいです.当駅のサポートに感謝します.