3


我需要一些信息,因为我不知道这是否可行。
我有片段活动,在那里我有标签。选项卡是列表片段。我的问题:

我需要列表中的一些自定义视图。我有一些信息,下面我有一张地图,上面有一个指向那个地方的图钉。这有可能吗???ListFrragment里面的MapFragment???
如果你能说这是可能的,并指出我正确的方向如何实施它,我将非常感激!!!
谢谢...

4

2 回答 2

4

这有可能吗?

当然,使用某种静态地图图像。谷歌为此提供了一个静态地图 API——虽然主要用于 Web,但原则上您也应该能够从 Android 应用程序中获取它。

ListFrragment 中的 MapFragment?

将片段ListView连续放置将很难甚至不可能,因为ListView期望它的孩子是Views,所以你可能需要使用MapView而不是MapFragment。此外,您还遇到了滚动地图的所有问题。而且,这是一个非常重量级的解决方案,所以我预计会出现性能问题。

于 2013-02-22T17:58:36.137 回答
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);
}

希望它可以帮助某人。

于 2015-01-29T22:58:08.320 回答