将 Google 地图片段嵌套在自定义片段内

2024-03-28

我正在尝试使用片段创建滑动视图。其中一个片段应该包装 GoogleMap MapFragment。直接在主活动中膨胀 MapFragment 可以。但是通过 FragmentPagerAdapter 会抛出在 Choreographer.class 中找不到的源。我找不到任何线索。发生了。我把这一切都设置基于this https://stackoverflow.com/questions/16978190/add-google-maps-api-v2-in-a-fragment回答。所以我的代码如下所示:

主要活动

public class MainActivity extends FragmentActivity {

FragPagerAdapter _fragPagerAdapter;
ViewPager _viewPager;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main_layout);

    _fragPagerAdapter = new FragPagerAdapter(getFragmentManager());
    _viewPager = (ViewPager)findViewById(R.id.pager);
    _viewPager.setAdapter(_fragPagerAdapter);

}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.main, menu);

    return true;
}

public class FragPagerAdapter extends  FragmentPagerAdapter {

    public FragPagerAdapter(FragmentManager fm) {
        super(fm);
    }

    @Override
    public Fragment getItem(int position) {

        Fragment fragment = null;

        if(position == 1){
        fragment = new LocMapFragment(); //CRASHES 
        }else{
            //Doesn't contain map .WORKS
            fragment = new DummySectionFragment();
            Bundle args = new Bundle();
            args.putInt(DummySectionFragment.ARG_SECTION_NUMBER, position + 1);
            fragment.setArguments(args);
        }

        return fragment;
    }

    @Override
    public int getCount() {
        // Show 3 total pages.
        return 3;
    }

    @Override
    public CharSequence getPageTitle(int position) {
        Locale l = Locale.getDefault();
        switch (position) {
        case 0:

            return getString(R.string.title_section1).toUpperCase(l);
        case 1:
            return getString(R.string.title_section2).toUpperCase(l);
        case 2:
            return getString(R.string.title_section3).toUpperCase(l);
        }
        return null;
    }
}


}

LocMap片段

public class LocMapFragment extends Fragment {

private GoogleMap  _map;
@Override
  public View onCreateView(LayoutInflater inflater, ViewGroup container,
      Bundle savedInstanceState){

  View v = inflater.inflate(R.layout.map_layout, null, false);

  _map = ((MapFragment) getFragmentManager().findFragmentById(R.id.map))
      .getMap();

  return v;
   }
}

map_layout布局

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

    <fragment
    android:id="@+id/map"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    class="com.google.android.gms.maps.SupportMapFragment" />

 </RelativeLayout>

我使用的是 Android API 中的片段,而不是支持 V4 中的片段。我尝试将片段布局更改为 class="com.google.android.gms.maps.SupportMapFragment",但仍然相同。

UPDATE:

好吧,不知怎的,它现​​在开始工作了。但是现在发生的情况是,如果地图片段位于第一个滑动片段中,然后我再滑动两次,只有文本。如果我从地图滚动到另一个地图,然后向后滚动,我是Choreographer.class 出现异常。

这个答案似乎已经解决了这个问题。 https://stackoverflow.com/questions/14083950/duplicate-id-tag-null-or-parent-id-with-another-fragment-for-com-google-androi


看看这个实现,你应该像你已经做的那样,创建一个带有地图的片段:

public class MapFragment extends Fragment

创建布局:地图视图.xml:

<?xml version="1.0" encoding="utf-8"?>

<fragment xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:map="http://schemas.android.com/apk/res-auto"
android:id="@+id/mapview"
android:name="com.google.android.gms.maps.SupportMapFragment"
android:layout_width="match_parent"
android:layout_height="match_parent"
map:cameraZoom="12"
map:mapType="normal"
map:uiZoomControls="false"
map:uiRotateGestures="true"
map:uiScrollGestures="true"
map:uiZoomGestures="true"
map:uiTiltGestures="false" />

然后在片段中执行以下操作:

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {

    return inflater.inflate(R.layout.mapview, container, false);
}

然后获取地图实例:

private GoogleMap getGoogleMap() {
        if (map == null && getActivity() != null && getActivity().getSupportFragmentManager()!= null) {
            SupportMapFragment smf = (SupportMapFragment)getActivity().getSupportFragmentManager().findFragmentById(R.id.mapview);
            if (smf != null) {
                map = smf.getMap();
            }
        }
        return map;
    }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将 Google 地图片段嵌套在自定义片段内 的相关文章

  • AppCompat DayNight 主题始终显示为 Light 主题?

    我正在使用 AppCompat 中引入的新 Theme AppCompat DayNight 主题版本23 2 http android developers blogspot com 2016 02 android support lib
  • 如何从菜单项获取视图引用?

    我试图获取菜单项的参考 但我就是不能 整个事情都在一个片段内 Menu boat accept menu xml menu menu
  • 使用 Android L Notification.MediaStyle 添加终止播放按钮

    我想使用新的 Android L MediaStyle 模板创建媒体播放通知 现在 我成功地完成了上一个 播放 暂停 下一个等操作 通过使用addAction 但我找不到像中那样添加 关闭 按钮的方法Android 通知文档 http de
  • 带有工具栏和 TabLayout 的 ViewPager 高度错误

    我在 AppBarLayout 下方有一个 ViewPager 带有工具栏和 TabLayout 我无法理解为什么加载的片段的高度大于可用空间 即使没有如此大的元素 使选项卡可滚动 这是主要的布局 xml
  • Android - NumberPicker 滚动/快速滑动更快

    如何使数字选择器滚动 快速滑动更快 目前从00分钟到59分钟需要付出很大的努力 我尝试过一些例子Android 中 Viewpager 控制器速度减慢 https stackoverflow com questions 8155257 sl
  • Android/iOS 上的相机远程快门如何工作?

    我最近在 Android iOS 上遇到了一个使用蓝牙的内置相机应用程序的远程快门 这是我找到的产品的示例链接 Link http www youtube com watch v cyVG76HDvh4 不是来打广告的 只是简单了解背后的技
  • Android XML 解析与 RSS

    我有我的 Rss 文件项目
  • 三星Android BLE多次读/写

    在 Samsung 4 2 到 4 3 BLE 应用程序迁移指南中 http developer samsung com ble http developer samsung com ble 它说 堆栈和 F W 的同步性质没有受到影响 那
  • 以编程方式创建进度绘制

    我有一个场景 我需要有大量的进度条可绘制对象 我无法为所有这些创建 xml 资源 因为我希望用户选择一种颜色 然后用于动态创建可绘制对象 下面是 xml 中的一个这样的可绘制对象 我如何以编程方式创建这个精确的可绘制对象
  • 任务“:app:checkReleaseDuplicateClasses”执行失败。扑

    请找到以下文件 1 应用程序 构建 gradle def localProperties new Properties def localPropertiesFile rootProject file local properties if
  • 对早期设备使用 Roboto 字体

    我想在我的 Android 应用程序中使用 Roboto 字体 并确保它适用于未安装该字体的早期版本的 Android 我知道我可以通过使用 Typeface createFromAsset 然后手动设置每个 TextViews Butto
  • 如何提高加速度计和指南针传感器的精度?

    我正在创建一个增强现实应用程序 当手机面向兴趣点 GPS 位置存储在手机上 时 它可以简单地可视化文本视图 文本视图绘制在屏幕中的兴趣点位置上 它工作正常 问题是指南针和加速度计非常 变体 并且文本视图由于传感器的准确性而不断左右上下移动
  • Android 中的 GPS 超时

    在黑莓中 我们使用超时来获取位置 这样如果它在这么长时间内没有重新调整位置 我们就会知道 但是在Android中 没有超时的概念 任何人都可以告诉我们替代方案 我们可以发现 在这么长时间之后 GPS没有位置更新 您可以使用两个线程来实现此超
  • 在适用于 iOS 的 Google 地图 SDK 上进行 GMSMapView 屏幕截图时出现问题

    我遇到的一个问题是当我尝试截取 GMSMapView Google Maps SDK iOS 任何部分的屏幕截图时 UIGraphicsGetImageFromCurrentImageContext UIImage 输出是不可见的 我最终发
  • 使用 Selenium IDE 单击 Google 地图

    我无法创建 Selenium 测试用例来自动点击 Google 地图 具体来说 通过单击地图来创建标记 IDE中的录制功能 记录 功能将我的鼠标点击记录为 tr td click td td div id map canvas div 3
  • 当按下 flutter 中编写的按钮时,有没有办法运行 python 脚本?

    本质上 我想做的是 按下我在 Flutter 中编程的按钮 当按下该按钮时 Python 脚本应该开始在我的 Android 设备上运行 我想在 python 中使用 youtube dl 用于下载 Youtube 视频 库 但我想知道是否
  • Android数据库访问设计方法

    我有一个关于数据访问的一般 Android 设计问题 我的应用程序中有许多活动需要访问 SQLite 数据库 为了将所有数据访问逻辑包装在一个地方 我创建了一个 DatbaseHandler 类来处理所有数据访问逻辑 此类负责构建 wher
  • 从多个通知启动活动会覆盖之前的意图

    public static void showNotification Context ctx int value1 String title String message int value2 NotificationManager no
  • Android:从 Android Java 源代码创建 UML [已关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在寻找一个可以从我的 Java Android 源代码自动创建 Uml 的程序 我测试过ArgoU
  • 执行选项卡切换时避免重新创建相同的视图

    目前 我有 2Fragments 可通过以下方式切换ActionBar s tab getSupportActionBar setNavigationMode ActionBar NAVIGATION MODE TABS ActionBar

随机推荐