片段中的onActivityResult未调用 - 可能与其他片段“混合”?

时间:2016-12-19 10:08:06

标签: android android-fragments

我已经遵循了this解决方案和其他一些解决方案,但似乎我错过了一些东西,我找不到它。

Fragment A中,当用户点击按钮时,他们会在地图中选择一个地点。

PlacePicker.IntentBuilder builder = new PlacePicker.IntentBuilder();
try {
     startActivityForResult(builder.build(getActivity()), PLACE_PICKER_REQUEST);
} catch (GooglePlayServicesRepairableException e) {
     e.printStackTrace();
} catch (GooglePlayServicesNotAvailableException e) {
     e.printStackTrace();
}

选择地点后,仍然在同一个片段中,地址将在EditText中。

@Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        Log.d("checkCall", "here");
        super.onActivityResult(requestCode, resultCode, data);
        if (requestCode == 1) {
            if (resultCode == Activity.RESULT_OK) {
                // get the address
                Place place = PlacePicker.getPlace(getActivity().getApplicationContext(), data);
                String address = String.format("Place: %s", place.getAddress());
                Log.d("address", address);
                editTextBizAddress.setText(address);
            } else if (resultCode == Activity.RESULT_CANCELED){
                dialog("Error in getting the address");
            }
        } else {
            super.onActivityResult(requestCode, resultCode, data);
        }
    }

所以,在我的父活动中 - MainActivity

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    switch (requestCode) {
        case 1001:
            if(resultCode == RESULT_OK){
                String tab = data.getExtras().getString("tab");
                if (tab.equals("profile")) {
                    viewPager.setCurrentItem(2);
                }
                tabLayout.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
                    @Override
                    public void onTabSelected(TabLayout.Tab tab) {
                        viewPager.setCurrentItem(tab.getPosition());
                        View focus = getCurrentFocus();
                        if (focus != null) {
                            hiddenKeyboard(focus);
                        }
                    }

                    @Override
                    public void onTabUnselected(TabLayout.Tab tab) {

                    }

                    @Override
                    public void onTabReselected(TabLayout.Tab tab) {
                        View focus = getCurrentFocus();
                        if (focus != null) {
                            hiddenKeyboard(focus);
                        }
                    }
                });
            }
            break;
        case 1:
            super.onActivityResult(requestCode, resultCode, data);
            break;
    }
}

我只设法让它只运行一次。但在那之后,它不再起作用了。虽然我不知道它是如何工作的。

这是因为onActivityResult中的MainActivity吗?当其他片段在onActivityResult中使用MainActivity时,是否可能混淆?

修改: 我更改了onActivityResult中的MainActivity,因为requestCode具有不同的值,但仍然相同 - 未调用的片段中的onActivityResult

2 个答案:

答案 0 :(得分:2)

我认为问题是关于

super.onActivityResult...

在活动和片段中。

在活动中评论此行。如果它不起作用 - 尝试相反(从片段中删除它,取消注释活动)

答案 1 :(得分:1)

要让片段能够接收 onActivityResult 的回调,您的活动必须实施onActivityResult()并且也应该调用super

有关进一步说明,您还可以看到this回答。