【问题标题】:Add Android Fragment to InfoWindow Contents将 Android 片段添加到 InfoWindow 内容
【发布时间】:2013-06-10 00:55:37
【问题描述】:

我正在编写一个面向 4.0 及更高版本的 Android 应用程序,并且我正在使用 Google Maps v2。我想用Fragment 设置InfoWindow 的内容。有谁知道可以吗?

我的班级实现了InfoWindowAdapter,下面是相关代码:

//
// InfoWindowAdapter interface
//

@Override
public View getInfoContents (Marker marker) {
    LinearLayout layout = new LinearLayout(this.getActivity());
    LayoutInflater inflater = (LayoutInflater) this.getActivity().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    View v = inflater.inflate(R.layout.map_details, layout);

    MapDetailsFragment frag = new MapDetailsFragment();
    // TODO: How to add this fragment to v???

    return v;
}

@Override
public View getInfoWindow (Marker marker) {
    return null;
}

我在实例化frag后尝试了以下代码:

this.getFragmentManager().beginTransaction().replace(R.id.fragment_map_details, frag).commit();

R.id.fragment_map_details 来自R.layout.map_details,因此FragmentManager 对此一无所知。

任何指针将不胜感激!

【问题讨论】:

    标签: android infowindow android-maps-v2


    【解决方案1】:

    从适配器返回的视图不是实时视图,而是转换为位图,因此不会执行与此视图关联的任何代码(如按钮单击)。

    片段也是同样的情况,因此您可以停止尝试,而是创建一个将 map_details 和片段布局绑定在一起的布局。在 xml 中使用 include 可能会起作用。

    【讨论】:

      【解决方案2】:

      我没有看到任何人实现它,我认为这是不可能的,因为它是为您创建的简单视图,这意味着很多事情都在您背后发生。

      【讨论】:

      • 我认为你是对的。我已经做了几天了,没有任何运气。幸运的是,我能够将片段中的大多数方法设为静态,因此我能够使用静态方法扩展视图并设置所有字段。不理想,但也不重复代码。
      【解决方案3】:

      三个建议:

      1. 事务和提交是异步的。您可以尝试拨打http://developer.android.com/reference/android/app/FragmentManager.html#executePendingTransactions()。但是,当我尝试使用它时,我有一次遇到了异常。但你可能会更幸运。

      2. 否则,您可以尝试将片段作为常规子视图添加到容器中,方法是将R.id.fragment_map_details 替换为从frag.getView() 返回的视图。然而,这只是一个疯狂的猜测。也许您不应该以这种方式使用该返回值。 (我对 Android 的 API 有点谨慎……)

      3. 来自https://developers.google.com/maps/documentation/android/infowindows(在“自定义信息窗口”下):

      要稍后更新信息窗口(例如,加载图像后),请调用 showInfoWindow()。

      因此,如果您能找到一种方法在片段事务完成时获得通知,那么您可以调用该方法来更新信息窗口。

      【讨论】:

        猜你喜欢
        • 2021-10-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-08-20
        • 2017-11-29
        • 1970-01-01
        • 2012-11-18
        相关资源
        最近更新 更多