在listview中映射片段?

时间:2013-02-22 17:40:33

标签: android google-maps listview


我需要一些信息,因为我不知道这是否可行。 我有片段活动,在那里我有标签。标签是列表片段。 我的问题:
我在列表中需要一些自定义视图。我有一些信息,下面我有一个地图,指针指向那个地方。这可能有??? ListFrragment里面的MapFragment ???
如果你能说这是可能的并指出我正确的方向如何实现它我将非常感激!
谢谢...

2 个答案:

答案 0 :(得分:4)

  

这可能有吗?

确定使用某种静态地图图像。谷歌有a static maps API for that - 主要是在网络上使用,原则上你也可以从Android应用程序中获取它。

  

ListFrragment中的MapFragment?

将片段放在ListView行中很难实现,因为ListView期望其子代为Views,因此您可能需要使用MapView而不是MapFragment。此外,您还有滚动地图的所有问题。而且,这是一个非常重要的解决方案,所以我希望性能问题。

答案 1 :(得分:4)

我刚刚遇到了类似的问题,我提出了以下解决方案。顺便说一句,现在播放服务有google map lite模式。

假设你有一个使用BaseAdapter的ListView,所以你应该覆盖你的getView方法。这就是我的getView的样子:

    @Override
public View getView(int position, View convertView, ViewGroup parent) {
    if ( convertView == null )
        convertView = new CustomItem(mContext,myLocations.get(position));

    return convertView;
}

其中类CustomItem是表示我的行的FrameLayout。

public class CustomItem extends FrameLayout {

public int myGeneratedFrameLayoutId;

public CustomItem(Context context,Location location) {
    super(context);
    myGeneratedFrameLayoutId = 10101010 + location.id; // choose any way you want to generate your view id

    LayoutInflater inflater = ((Activity) context).getLayoutInflater();

    FrameLayout view = (FrameLayout) inflater.inflate(R.layout.my_custom_item,null);
    FrameLayout frame = new FrameLayout(context);
    frame.setId(myGeneratedFrameLayoutId);

    int height = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 150, getResources().getDisplayMetrics());
    LayoutParams layoutParams = new LayoutParams(LayoutParams.MATCH_PARENT,height);
    frame.setLayoutParams(layoutParams);

    view.addView(frame);

    GoogleMapOptions options = new GoogleMapOptions();
    options.liteMode(true);
    MapFragment mapFrag = MapFragment.newInstance(options);

    //Create the the class that implements OnMapReadyCallback and set up your map
    mapFrag.getMapAsync(new MyMapCallback(location.lat,location.lng));

    FragmentManager fm = ((Activity) context).getFragmentManager();
    fm.beginTransaction().add(frame.getId(),mapFrag).commit();

    addView(view);
}

希望它有所帮助。