【问题标题】:extra value not passed from activity using onActivityResult to fragment未使用 onActivityResult 将额外值从活动传递到片段
【发布时间】:2016-03-30 14:53:21
【问题描述】:

更新
Activity A ==> 宿主 MyFragment 并从这里开始,用户开始 ==> ActivityB 从这里我需要从这个活动中获取一些值,例如值整数和一些字符串到 MyFragment 托管在 ActivityA

我有 MyFragment 像这样启动 activityB

 Intent intent = new Intent(getActivity(),NewsCommentActivity.class);
        intent.putExtra("MNewsFeed", new Gson().toJson(newsFeed));
        intent.putExtra("idCommentBadge",idCommentBadge);
        startActivityForResult(intent,addComment);

然后当用户开始活动并完成它时,我试图将一些值从该 ActivityB 传递给 MyFragment,如下所示:

@Override
    public void onBackPressed() {
        super.onBackPressed();
        //set ok result before finish the activity

        Intent returnIntent = new Intent();
        returnIntent.putExtra("idBadgeComment", idBadgeComment);
        returnIntent.putExtra("totalCommentInserted", totalCommentInserted);
        setResult(RESULT_OK, returnIntent);
        finish();
    }

我已经在 MyFragment 中实现了 onActivityResult :

@Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        Log.i(TAG, "Result from News Comment ");

        if(resultCode== Activity.RESULT_OK){
            Log.i(TAG, "Result from News OK");
            if(requestCode==addComment){
                Log.i(TAG, "Result ReqCode Oke");

                int idBadgeComment = data.getExtras().getInt("idBadgeComment");
                int totalCommentInserted = data.getExtras().getInt("totalCommentInserted");

                Log.i(TAG, "idComment: "+idBadgeComment);
                Log.i(TAG, "Total Comment Inserted: "+totalCommentInserted);
            }
        }
    }

我还调用了托管 MyFragmentActivityA 中的 onActivityResult :

@Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);

        /**
         * call below code to get the result on the fragment
         */
        Fragment fragment = getSupportFragmentManager().findFragmentById(R.id.viewpager);
        fragment.onActivityResult(requestCode, resultCode, data);

    }

当我尝试上面的代码时,我只得到Log.i(TAG, "Result from News Comment ");,它没有得到RESULT_OK 值并且Intent data 为空,有人可以指出我哪里出错了?以及如何将值从活动传递到片段?或者可能是更好的方法而不是使用 onActivityResult?

【问题讨论】:

  • 你从你的活动开始片段。所以你有对该片段的引用。为什么需要额外的方法(如 onActivityResult)将一些值传递给该片段?您可以在片段 setXYZ(XYZ xyz) 中创建方法并从活动中调用它。
  • 是的,我可以这样做来设置值,但我需要在 mainUI 线程中更改 UI,所以我需要将值从活动传递到我的片段
  • Activity 在 UI 线程上运行。然后从活动中更改它。
  • @Wukash 你的建议在这种情况下不会达到我想要的效果
  • @Wukash 那不是不同的 UI 线程吗?因为当我从片段开始活动时,据我所知,托管片段的活动将进入暂停状态或停止,我无法从活动 B 中的活动 A 更改 UI 对吗?

标签: java android android-fragments


【解决方案1】:

您可以尝试将super.onBackPressed(); 作为最后一行,因为RESULT_CANCELED 在后按时返回。

【讨论】:

    【解决方案2】:

    只需按活动启动活动。

        Intent intent = new Intent(getActivity(),NewsCommentActivity.class);
        intent.putExtra("MNewsFeed", new Gson().toJson(newsFeed));
        intent.putExtra("idCommentBadge",idCommentBadge);
        getActivity().startActivityForResult(intent,addComment);
    

    或者把你的 onActivityResult 放到片段中。

    【讨论】:

    • 是的,我尝试在我的片段中使用 getActivity() 来 startActivityForResult(),但我仍然没有从 ActivitB 中获取值,但没有通过槽。请查看我的更新问题谢谢
    • 并使用 getActivity() 生成 Log.i(TAG, "Result from News Comment ");没有打印在片段中
    • @GujaratSantana 删除 super.onBackPress()。此行将完成 Activity。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多