【问题标题】:Starting a fragement is restarting the parent fragment启动一个fragment就是重启父fragment
【发布时间】:2019-08-21 17:47:27
【问题描述】:

我在同一屏幕上显示带有自动完成搜索栏的片段中的谷歌地图。我的 xml 布局是这样的

<LinearLayout ..>
    <Fragment .../> // the map fragment
    <Fragment .../>  // the auto complete support fragment
</LinearLayout>

当您单击 AutoCompleteSupportFragment 搜索栏时,它会打开覆盖窗口,以便您进行搜索。退出后,我从日志中注意到 MAP 片段正在重新启动(再次调用 OnCreate 和 OnCreateView)。

就好像显示嵌套片段正在重置父片段。这是一个问题,因为我丢失了任何信息,我无法将所选地点从酒吧发送回地图

有什么帮助吗?

PS:没有添加嵌套片段的代码。片段是谷歌片段并在 XML 中定义。

【问题讨论】:

  • 您应该可以使用onSavedInstanceState 来维护状态和数据。
  • 这与维护无关,这里的问题是为什么片段首先重新启动。我需要将选定的位置传递给地图片段,以便导航到它,如果地图片段被破坏,那么这是一个问题。我只是想知道地图碎片与搜索碎片如何共存。
  • 这是“重新启动”,因为这就是片段生命周期的工作方式。您应该考虑其他选项,例如使用工具栏(或其他视图)进行搜索。这是片段链接developer.android.com/guide/components/fragments。它会告诉你为什么你的片段会重启。
  • 那么地图片段和自动完成片段(都是good提供的小部件)如何协同工作并且在搜索时不重新启动?
  • 也许你执行错了。 developers.google.com/places/android-sdk/autocomplete又是谁说不重启的?

标签: android google-maps android-fragments google-places-api


【解决方案1】:

您可能要考虑使用PlaceSelectionListener,它可能看起来像这样:

// Initialize the AutocompleteSupportFragment.
AutocompleteSupportFragment autocompleteFragment = (AutocompleteSupportFragment)
        getSupportFragmentManager().findFragmentById(R.id.autocomplete_fragment);

// Specify the types of place data to return.
autocompleteFragment.setPlaceFields(Arrays.asList(Place.Field.ID, Place.Field.NAME));

// Set up a PlaceSelectionListener to handle the response.
autocompleteFragment.setOnPlaceSelectedListener(new PlaceSelectionListener() {
    @Override
    public void onPlaceSelected(Place place) {
        // TODO: Get info about the selected place.
        Log.i(TAG, "Place: " + place.getName() + ", " + place.getId());
    }

    @Override
    public void onError(Status status) {
        // TODO: Handle the error.
        Log.i(TAG, "An error occurred: " + status);
    }
});

您可以在documents 中找到此示例以及如何正确实现此功能的其他示例。

【讨论】:

  • 这正是我使用的。只要您单击 R.id.autocomplete_fragment 小部件,然后选择地点(或取消),然后地图片段就会重新创建
  • @Snake 你找到解决这个问题的方法了吗?
  • 我必须将值存储在 sharepreferences 中并检索它,同时确保它在此活动之外无效。非常复杂的解决方案,我确信这不是正确的方法
  • 这不是正确的做法。老实说,文档说,“要在用户选择一个地点时收到通知,您的应用程序应该覆盖 Activity 的 onActivityResult(),检查您为您的意图传递的请求代码,如下例所示。”。文档清楚地概述了两种方法来做到这一点。
  • @BlackHatSaumari,我认为您没有在这里遇到问题。无论文档说什么,都已实施。这里的问题是你有地图片段,在它之上你有 AutoCompleteSupportFragement (完全不同的片段)。假设在地图片段中,您将地图移动到某个位置并放大。然后单击搜索栏(自动完成)。为了简单起见,甚至不进行搜索,只需取消搜索即可。您会发现地图片段已重置为原始位置/缩放级别。整个地图片段被重新创建
猜你喜欢
  • 1970-01-01
  • 2019-01-10
  • 2012-04-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多