我正在尝试将小地图添加到列表中,并创建了一个Cursor适配器来处理位置列表。
单个位置的布局如下所示:
<LinearLayout
... >
<TextView android:id="@+id/start_loc"
...
/>
<fragment android:id="@+id/start_loc_map"
android:name="com.google.android.gms.maps.MapFragment"
...
/>
</LinearLayout>
然后在适配器中:
@Override
public void bindView(View view, Context context, Cursor cursor) {
startLocView = (TextView) view.findViewById(R.id.start_loc);
然后像:
SupportMapFragment startLocMap =
(SupportMapFragment) view.findViewById(R.id.start_loc_map);
或:
SupportMapFragment startLocMap =
(SupportMapFragment) getChildFragmentManager()
.findFragmentById(R.id.start_loc_map);
这些都不起作用。视图(毫不奇怪)不能被转换为片段,并且适配器没有可用的片段或活动。我可以获得一个上下文和(Activity) context.getFragmentManager
,但我找不到任何方法可以从中获取getChildFragmentManager
。我可以得到一个FrameLayout,这是容器对象的内容,但我不知道如何引用其中包含的Fragment。
如何从适配器获取布局中的静态(?)片段的引用?得到<fragment>
比<TextView>
更简单吗?
答案 0 :(得分:1)
使用游标适配器在列表视图中显示地图会有很多工作。您将面临的另一个问题是性能下降和应用程序崩溃频繁。在listView中直接使用mapView是一项繁重的操作。这将导致延迟,结果将是您的应用程序的用户体验缓慢。要避免此行为,您可以使用Static maps。这将在列表视图中启用延迟加载地图,而且用户不必立即点击地图。如果您没有在地图上提供用户的当前位置litview静态地图是最佳选择。
我在下面提供一个使用此方法的小例子。首先从数据(API或DB)创建列表视图。然后将纬度和经度等数据传递给一个字符串,其中一些静态变量定义如下。
String getMapURL = "http://maps.googleapis.com/maps/api/staticmap?zoom=12&size=360x180&markers=size:mid|color:green|"
+ JOLocation.getString("latitude")
+ ","
+ JOLocation.getString("longitude")
+ "&sensor=false";
上述构造的URL在浏览器中使用时会返回.PNG文件。然后,在我的活动适配器中,此方法导致在应用程序中延迟加载地图,其中显示坐标的标记在运行时被提取,从而避免在代码中繁重工作。
希望这会有所帮助!!!