2015-06-24 46 views
1

我想将小地图添加到列表中,并创建了一个Cursor适配器来处理位置列表。如何引用android列表适配器中的片段

对个人位置的布局是这样的:

<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); 

或:

这些作品都没有。该视图(并不令人意外)不能作为片段进行转换,并且不存在可用于适配器的片段或活动。我可以得到一个上下文和(Activity) context.getFragmentManager,但我找不到任何方式从getChildFragmentManager。我可以得到一个FrameLayout,这是容器对象,但我不知道任何方式引用其中包含的碎片。

如何从适配器获取对布局中的静态(?)片段的引用?获得<fragment><TextView>简单吗?

回答

1

在使用游标适配器的列表视图中显示地图会有很多工作。您应该面对的另一个问题是性能下降和应用程序崩溃。在listView中直接使用mapView是一项沉重的操作。这会导致延迟,并且结果会导致应用程序的用户体验缓慢。为了避免这种行为,你可以选择使用Static maps。这将启用在您的列表视图中延迟加载地图,并且therby用户不必不时地点击地图。如果你没有在地图上提供用户的当前位置litview静态地图是最好的选择。

我在下面提供了一个使用此方法的小示例。首先从数据创建一个列表视图(API或数据库)。然后将数据(如纬度和经度)传递给一个字符串,其中包含一些静态变量,如下所示。

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文件。然后,在我的活动适配器中,此方法导致在应用程序中延迟加载地图,在运行时获取显示坐标的标记,从而避免代码繁重工作。

希望这会有所帮助!

+0

谢谢你。我正在寻找一种方法来做类似的事情,但是我需要能够像通过maps API那样标记地图,添加标记。这个阶段不一定需要互动。类似的线程中的海报(http://stackoverflow.com/questions/27397269/how-to-add-mapfragment-inside-a-listview-item-within-adapter)建议使用“lite”('options.liteMode (true);')模式,这将改善预期的问题。我还没有尝试过。 – albe

+0

此外,这取决于位置。 – albe

相关问题