關於Fragment 不響應onActivityResult的情況分析
阿新 • • 發佈:2019-02-18
我最開始是用的一個activity預設的常量:RESULT_OK,跟蹤了程式碼後發現,該常量的值為-1,當然沒法啟用 onActivityResult方法了,隨後隨便修改為一個大於0的整數,程式即通跑成功。
startActivityForResult(intent, 1); //這樣就行了
API描述:
@requestCode If >= 0, this code will be returned in onActivityResult() when the activity exits.
3、在TabHost的子Activity中startActivityForResult呼叫其他Activity時候遭遇到onActivityResult方法不響應的問題。可以通過呼叫Activity的getCallingActivity()檢視要接受資料的Activity。
API這麼解釋的:
Return the name of the activity that invoked this activity. This is
* who the data in {@link #setResult setResult()} will be sent to.
舉個列子,有兩個ActivityA和B,A中執行startActivityForResult(1,new Intent(A,B.class));
即由A調到B,再B執行setResult後執行getCallingActivity(),顯示A。
解決辦法如下:
1.通過父Activity啟動其他Activity;
2.實現父Activity的onActivityResult方法,將該處接收到的請求轉發給當前活動的子Activity;
3.自定義一個轉發介面用來實現第2步中的轉發功能;
4.子Activity中實現第3步介面中的方法用來接收返回資訊;
程式碼如下:
1.通過父Activity啟動其他Activity
1 getParent().startActivityForResult(new Intent(...), REQUEST_CODE);
2.實現父Activity的onActivityResult方法
3.自定義介面
public interface OnTabActivityResultListener {
public void onTabActivityResult(int requestCode, int resultCode, Intent data);
}
4.子Activity需要實現onTabActivityResult方法
@Override
public void onTabActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == REQUEST_CODE && resultCode == RESULT_OK) {
//實現該處邏輯
...
}
}
總結:凡是Activity本身含有上次父類的情況都不能直接使用startActivityForResult,而要通過getParent(),通過父類呼叫此方法。
startActivityForResult(intent, 1); //這樣就行了
API描述:
@requestCode If >= 0, this code will be returned in onActivityResult() when the activity exits.
3、在TabHost的子Activity中startActivityForResult呼叫其他Activity時候遭遇到onActivityResult方法不響應的問題。可以通過呼叫Activity的getCallingActivity()檢視要接受資料的Activity。
API這麼解釋的:
Return the name of the activity that invoked this activity. This is
* who the data in {@link #setResult setResult()} will be sent to.
舉個列子,有兩個ActivityA和B,A中執行startActivityForResult(1,new Intent(A,B.class));
即由A調到B,再B執行setResult後執行getCallingActivity(),顯示A。
解決辦法如下:
1.通過父Activity啟動其他Activity;
2.實現父Activity的onActivityResult方法,將該處接收到的請求轉發給當前活動的子Activity;
3.自定義一個轉發介面用來實現第2步中的轉發功能;
4.子Activity中實現第3步介面中的方法用來接收返回資訊;
程式碼如下:
1.通過父Activity啟動其他Activity
1 getParent().startActivityForResult(new Intent(...), REQUEST_CODE);
2.實現父Activity的onActivityResult方法
3.自定義介面
public interface OnTabActivityResultListener {
public void onTabActivityResult(int requestCode, int resultCode, Intent data);
}
4.子Activity需要實現onTabActivityResult方法
@Override
public void onTabActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == REQUEST_CODE && resultCode == RESULT_OK) {
//實現該處邏輯
...
}
}
總結:凡是Activity本身含有上次父類的情況都不能直接使用startActivityForResult,而要通過getParent(),通過父類呼叫此方法。