我正在编写一个针对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
对此一无所知。
任何指针都将非常感谢!
答案 0 :(得分:0)
我没有看到任何人实现它,我认为这不可能,因为它是一个为您创建的简单视图,意味着很多事情发生在您背后。
答案 1 :(得分:0)
从适配器返回的视图不是实时视图,而是转换为位图,因此不会执行与此视图关联的代码(如按钮单击)。
同样的情况是片段,所以你可以停止尝试,而是创建一个将map_details和片段布局绑定在一起的布局。在xml中使用include可能会有效。
答案 2 :(得分:0)
三点建议:
事务和提交是异步的。您可以尝试拨打http://developer.android.com/reference/android/app/FragmentManager.html#executePendingTransactions()。但是,当我尝试使用它时,我在某个时刻遇到了异常。但是你可能会有更多的运气。
否则,您可以尝试将片段作为常规子视图添加到容器中,方法是将R.id.fragment_map_details
替换为frag.getView()
返回的视图。然而,这只是一个疯狂的猜测。也许你不应该以这种方式利用那个回报值。 (对于Android的API,我有点谨慎......)
从https://developers.google.com/maps/documentation/android/infowindows(在“自定义信息窗口”下):
要稍后更新信息窗口(例如,在加载图像后),请调用showInfoWindow()。
因此,如果您可以找到在片段事务完成时获得通知的方法,那么您可以调用该方法来更新信息窗口。