Fragment中的onActivityResult无法访问UI元素

时间:2015-12-03 15:57:46

标签: java android android-fragments fragment

当我按下它时,我在Fragment中有一个按钮我为结果打开一个新活动但当我返回到我的片段时,我发现所有UI元素= null

请找到代码

button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                Intent intent = new Intent(getActivity(), MyActivity.class);
                getActivity().startActivityForResult(intent, "3030");
            }
    });

当从活动中选择一个值时,我应该回到片段并将数据设置为活动中的textview。

    Intent intent = Activity.this.getIntent();
    intent.putExtra("categoryId", id);
    intent.putExtra("categoryName", name);
    setResult(RESULT_OK, intent);
    finish();

我把它放在包含片段

的活动中
protected void onActivityResult(int requestCode, int resultCode, Intent data) {

        super.onActivityResult(requestCode, resultCode, data);

        if (requestCode == 3030 && resultCode == RESULT_OK) {
            Fragment fragment = mTabFragments.get(MyFragment.class.getName());

            if (fragment != null) {

                fragment.onActivityResult(requestCode, resultCode, data);
            }
        }
    }

和片段

public void onActivityResult(int requestCode, int resultCode, Intent data) {

        super.onActivityResult(requestCode, resultCode, data);

        if (requestCode == 3030 && resultCode == Activity.RESULT_OK) {

            int categoryId = data.getIntExtra("categoryId", 0);
            String categoryName = data.getStringExtra("categoryName");
            mChooseCategoryTextView.setText(categoryName);
        }
    }

现在mChooseCategoryTextView为空的问题

谁能告诉我这是什么问题?

3 个答案:

答案 0 :(得分:0)

获得片段

的结果
startActivityForResult(intent,REQ_CODE); 

getActivity().startActivityForResult(intent,REQ_CODE);

答案 1 :(得分:0)

我认为你如何初始化这个观点的问题? 由于您正在进行另一项活动,因此您的整个片段将重建或仅在ViewCreated上再次召回。

所以我的猜测是你不会在一个片段回调中重新初始化或覆盖mChooseCategoryTextView引用。

尝试添加更多日志并检查此参考的内容

答案 2 :(得分:0)

我认为错误在行中 Fragment fragment = mTabFragments.get(MyFragment.class.getName());
我在某种适配器中假设mTabFragments?我必须查看它的代码才能确定,但​​听起来它并没有返回正确的片段。确保它返回的引用与屏幕上显示的片段相同。