startActivityForResult无法在片段中工作并且无法启动活动

时间:2019-04-15 05:46:03

标签: android android-fragments android-activity

我正试图在片段中startActivityForResult,我这样做:

public class MyFragment extends Fragment {
.....
 new GetNidBase(getContext(), code, Integer.parseInt(_newBlock.split("-")[3]),
     WKT1, user, cookie, permissions, _newBlock, (nidBase) -> {
     if (!TextUtils.isEmpty(nidBase)) {
         Intent intent = new Intent(requireContext(), FormSaveDocument.class);
         intent.putExtra(BaseFragment.ARG_COOKIE, HttpUtil.serializeCookie(cookie));
         intent.putExtra(BaseFragment.ARG_USER, common.Utils.compactUserInstance(user));
         intent.putExtra(BaseFragment.ARG_PERMISSIONS, GsonUtil.createGson().toJson(permissions));
         startActivityForResult(intent, INTENTRESULT);
         }

我想在片段的onActivityForResult()中处理结果,但是我想知道FormSaveDocument是否未启动? FormSaveDocument是活动班!startActivityForResult(intent, INTENTRESULT)不起作用。

我也尝试这样做:

MyFragment.this.startActivityForResult(intent, INTENTRESULT);

这是我片段中的onActivityResult

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data){
    if (requestCode == INTENTRESULT && resultCode == 20) {
        saveDraw();
    }
}
  

更新

这是myActivity和FormSaveDocument清单信息:

   <activity
        android:name=".activity.MainActivity"
        android:configChanges="keyboardHidden|orientation|screenSize"
        android:launchMode="singleTop">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    <activity
        android:name=".forms.FormSaveDocument"
        android:configChanges="keyboardHidden|orientation|screenSize" />

    </activity>

3 个答案:

答案 0 :(得分:0)

在活动中获得结果的地方,您必须使用与添加片段相同的片段对象。

答案 1 :(得分:0)

请使用
startActivityForResult(intent, INTENTRESULT);插入了片段中的MyFragment.this.startActivityForResult(intent, INTENTRESULT);,并且

然后在片段中的句柄onActivityResult()之后

这将使您回叫片段

另一个解决方案是:
处理您的活动中的onActivityResult

@Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        try {
            getCurrentFrg().onActivityResult(requestCode,resultCode,data);    
        }catch (Exception e){
            e.printStackTrace();
        }
    }

答案 2 :(得分:0)

您不能从片段发送Intent,您的源上下文必须是您的Activity

因此将requireContext()方法替换为getActivity()