如何在android列表适配器中引用Fragment

时间:2015-06-24 16:10:01

标签: android google-maps android-layout

我正在尝试将小地图添加到列表中,并创建了一个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>更简单吗?

1 个答案:

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

希望这会有所帮助!!!