将Android片段添加到InfoWindow内容

时间:2013-06-10 00:55:37

标签: android infowindow android-maps-v2

我正在编写一个针对4.0及更高版本的Android应用程序,而我正在使用Google Maps v2。我想设置一个InfoWindow的内容Fragment。有谁知道这是否可能?

我的班级实现了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对此一无所知。

任何指针都将非常感谢!

3 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

三点建议:

  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(在“自定义信息窗口”下):

  4.   

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

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