3

我正在尝试从属于我的 Android 应用程序的片段中使用 google placepicker。我似乎无法使用 onActivityResult 返回的数据。我使用来自(https://inthecheesefactory.com/blog/how-to-fix-nested-fragment-onactivityresult-issue/en)的解决方案将结果返回到片段中。但是,此解决方案不允许我根据 placePicker 的输入更改视图中的元素。带有地点信息的吐司可以工作,但不会更改按钮,因为它在膨胀的视图之外。我正在使用片段,因为我的应用程序是一个带有 2 个片段的选项卡式滑块应用程序,用于创建位置和查看位置。

如有必要,请帮助并要求澄清!

这是 myFragment 中的 onCreateView 扩展 Fragment 类:

@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    View rootView = inflater.inflate(R.layout.activity_make_minyan, container, false);

    //Map Place Activity
    final Button locationButton = (Button) rootView.findViewById(R.id.button_location);
    locationButton.setOnClickListener(new View.OnClickListener() {
        //int RESULT_OK;
        public void onClick(View v) {
            PlacePicker.IntentBuilder builder = new PlacePicker.IntentBuilder();
            try {
                getActivity().startActivityForResult(builder.build(getActivity()), PLACE_PICKER_REQUEST);
            } catch (GooglePlayServicesRepairableException e) {
                e.printStackTrace();
            } catch (GooglePlayServicesNotAvailableException e) {
                e.printStackTrace();
            }
        }
    });
    //a bunch of other buttons and spinner etc that are working.

    return rootView;
}

这是上面链接的解决方案中使用的 onActivityResult 代码。注释掉的行是当前不起作用的代码行。

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (requestCode == PLACE_PICKER_REQUEST) {
        if (resultCode == Activity.RESULT_OK) {
            Place place = PlacePicker.getPlace(data, getActivity());
            //locationButton.setText(String.format("Place: %s", place.getName()));
            String toastMsg = String.format("Place: %s", place.getName());
            Toast.makeText(getContext(), toastMsg, Toast.LENGTH_LONG).show();
        }
    }
}
4

1 回答 1

0

如果您编写 getActivity().startActivityForResult(...),那么 onActivityResult 将在您的 Activity 中调用,而不是在您的 Fragment 中。

试试 startActivityForResult(...)

于 2016-07-29T08:15:39.803 回答