【问题标题】:Google Map inside a fragment with custom layout具有自定义布局的片段内的谷歌地图
【发布时间】:2013-11-15 15:03:27
【问题描述】:

在具有自定义布局的片段中获取谷歌地图的最佳选择是什么?

我正在尝试将 GoogleMapsV2 用于片段(选项卡)之一。该片段将在背景中有一些按钮和带有标记的谷歌地图。所以视图看起来像http://www.androidtapp.com/wp-content/uploads/2009/08/CardioTrainer-Map.jpg(不过我的会比这简单得多)

谷歌搜索后,大量溢出堆栈并进行试验,这就是我所理解的 1.我可以在我的片段中使用 SupportMapFragment(我试过了。但太糟糕了,我无法获得我的自定义按钮)

2.我可以使用更高版本的 SDK (sdk 12) 的 MapFragment。我不介意失去向后兼容性。 但是这个选项看起来不对,因为我的 FragmentPagerAdapter 期望我返回一个 Fragment 而不是 MapFragment

看起来没有简单/标准的方法来完成这项工作 我需要一些帮助才能朝着正确的方向前进。我是一个新的自学安卓开发者。如果我错过了这里的基础知识,请多多包涵。如果有帮助,我可以发布代码。但是,我正在寻求帮助以了解前进的方向,而不是直接代码方面的帮助。感谢观看

【问题讨论】:

  • 你不能只拥有一个在其中嵌入 MapFragment 或 SupportMapFragment 的片段吗?
  • 我尝试在我的 relativeView 中有一个片段但我看到一个异常说'不能膨胀视图。二进制 xml 中的错误。感谢您的关注
  • @HariG 为什么不问你原来的问题呢?您很可能做错了什么,例如将片段放入其他片段的布局 xml。
  • @MaciejGórski 我不确定是否可以使用 SupportMapFragment 进行自定义布局,这就是我不采用这条路线的原因。正如我之前所说,我需要一些正确的方法来做到这一点。如果有帮助,我会在回家后发布我的代码。感谢您抽出时间回复

标签: java android google-maps android-fragments


【解决方案1】:

听起来你想要这样的东西:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >

<fragment
    android:id="@+id/map_v2"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    class="com.google.android.gms.maps.MapFragment" />

<RelativeLayout
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal"
    android:padding="0px" >

<!-- Lots of fancy layout -->   

</RelativeLayout>
</RelativeLayout>

然后在您的 SupportMapFragment 中是这样的:

public class MyFragment extends Fragment {

private SupportMapFragment fragment;
private GoogleMap map;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle       savedInstanceState) {
return inflater.inflate(R.layout.layout_with_map, container, false);
}

@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
FragmentManager fm = getChildFragmentManager();
fragment = (SupportMapFragment) fm.findFragmentById(R.id.map);
if (fragment == null) {
    fragment = SupportMapFragment.newInstance();
    fm.beginTransaction().replace(R.id.map, fragment).commit();
}
}

@Override
public void onResume() {
super.onResume();
if (map == null) {
    map = fragment.getMap();
    map.addMarker(new MarkerOptions().position(new LatLng(0, 0)));
}
}
}

另外,值得一提...第二次重新加载片段似乎存在错误。这是 SupportMapFragment 的一种解决方法。见这里:The work around

这里也有可能更好的解决方法,但我还没有尝试过:Option 2

【讨论】:

  • 非常感谢您的回复。看起来它应该工作。我会试一试并将结果发布到这里。
  • 请记住,您不应该通过 xml 添加嵌套片段:developer.android.com/about/versions/… 您提到的错误仅仅是因为没有遵循文档。
  • 据我所知,这是一个错误。 code.google.com/p/android/issues/detail?id=42601 如果你有更好的修复,那不会抛出异常。请分享。
  • @Kaleb 最后我的应用程序在遵循您的建议后工作。非常感谢
猜你喜欢
  • 1970-01-01
  • 2014-07-29
  • 1970-01-01
  • 2014-01-02
  • 1970-01-01
  • 1970-01-01
  • 2018-03-08
  • 2019-11-02
  • 2014-06-12
相关资源
最近更新 更多