简体   繁体   English

android片段中的谷歌地图

[英]google maps in fragment android

I'm having problems loading a google Maps in my fragment.我在我的片段中加载谷歌地图时遇到问题。 Everything starts in a recycler view adapter that launchs the activity "ViatgeDetallViewActivity" :一切都从启动活动“ViatgeDetallViewActivity”的回收器视图适配器开始:

Context context = mActivity.getApplicationContext(); 
                    Intent intent = new Intent(context, ViatgeDetallViewActivity.class);
                   holder.mViatge.getId());
                    intent.putExtra("desc",p.getDesc());
                    intent.putExtra("location",p.getLocation());
                    mActivity.startActivityForResult(intent,ACTIVITY_View);

This is my DetallViewActivity :这是我的 DetailViewActivity :

public class ViatgeDetallViewActivity extends AppCompatActivity {

ViatgeDetallViewFragment fragment;

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_view);
    Bundle extras = getIntent().getExtras();
    if(extras != null)
    {

        String s =  getIntent().getStringExtra("desc");
        Location l = getIntent().getParcelableExtra("location");

        Log.d("myTag", "estoy en el oncreate de detallviewActivity pasando pro extras" + s );


    }

        fragment = new ViatgeDetallViewFragment();


        getSupportFragmentManager().beginTransaction()
                .add(R.id.activity_fragment_view, fragment)  
                .commit();
     getFragmentManager().beginTransaction().add(R.id.activity_fragment_view, fragment).commit();
    }
}

With my ViatgeDetallViewFragment being :我的 ViatgeDetallViewFragment 是:

public class ViatgeDetallViewFragment extends Fragment implements OnMapReadyCallback {

private GoogleMap mMap;
private Marker mMarcadorActual;

public ViatgeDetallViewFragment() {
}
....
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    View rootView = inflater.inflate(R.layout.fragment_view, container, false);


    SupportMapFragment mapFragment =
            (SupportMapFragment)
                    getChildFragmentManager().findFragmentById(R.id.fragment_view_map);
    mapFragment.getMapAsync(this);


    return rootView;
}

@Override
public void onMapReady(GoogleMap googleMap) {
    mMap = googleMap;


   //ask for permissions..
        mMap.setMyLocationEnabled(true);


    LatLng sydney = new LatLng(-34, 151);
    mMarcadorActual = mMap.addMarker(new MarkerOptions().position(sydney).title("Marker in Sydney"));

}

With the layouts being , Activity_view:布局为 Activity_view:

<Linear ...

  <android.support.v7.widget.Toolbar
        android:id="@+id/tlbMenuView"
        android:layout_width="match_parent"
        android:layout_height="?attr/actionBarSize"
        android:background="?attr/colorPrimary"
        android:elevation="4dp"
        />

    <FrameLayout
        android:id="@+id/activity_fragment_view"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        />

fragment_view:片段视图:

<LinearLayout android:id="@+id/layout_fragment_view" xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent"
    >
..
    <fragment
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/fragment_view_map"
        class="com.google.android.gms.maps.MapFragment"></fragment>

</LinearLayout>

The problem comes when i try launch tje "ViatgeDetallActivity" , i get this in the log:当我尝试启动 tje "ViatgeDetallActivity" 时出现问题,我在日志中得到了这个:

FATAL EXCEPTION: main Process: com.example.usuari.myapplication3, PID: 6390 java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.usuari.myapplication3/com.example.usuari.myapplication3.ViatgeDetallViewActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'void com.google.android.gms.maps.SupportMapFragment.getMapAsync(com.google.android.gms.maps.OnMapReadyCallback)' on a null object reference at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3254) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3350) at android.app.ActivityThread.access$1100(ActivityThread.java:222) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1795) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:158) at android.app.ActivityThread.main(ActivityThread.java:7229) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsC致命异常:主进程:com.example.usuari.myapplication3,PID:6390 java.lang.RuntimeException:无法启动活动 ComponentInfo{com.example.usuari.myapplication3/com.example.usuari.myapplication3.ViatgeDetallViewActivity}:java。 lang.NullPointerException:尝试在 android.app.ActivityThread 的空对象引用上调用虚拟方法“void com.google.android.gms.maps.SupportMapFragment.getMapAsync(com.google.android.gms.maps.OnMapReadyCallback)”。 performLaunchActivity(ActivityThread.java:3254) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3350) at android.app.ActivityThread.access$1100(ActivityThread.java:222) at android.app.ActivityThread$H.handleMessage( ActivityThread.java:1795) 在 android.os.Handler.dispatchMessage(Handler.java:102) 在 android.os.Looper.loop(Looper.java:158) 在 android.app.ActivityThread.main(ActivityThread.java:7229) ) 在 java.lang.reflect.Method.invoke(Native Method) 在 com.android.internal.os.ZygoteInit$MethodAndArgsC aller.run(ZygoteInit.java:1230) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120) Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void com.google.android.gms.maps.SupportMapFragment.getMapAsync(com.google.android.gms.maps.OnMapReadyCallback)' on a null object reference at com.example.usuari.myapplication3.ViatgeDetallViewFragment.onCreateView(ViatgeDetallViewFragment.java:82) at android.support.v4.app.Fragment.performCreateView(Fragment.java:2074) at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1104) at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1286) at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:758) at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1671) at android.support.v4.app.FragmentController.execPendingActions(FragmentController.java:388) at android.support.v4.app.FragmentActivity.onStart(FragmentActivity.java:619) aller.run(ZygoteInit.java:1230) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120) 由​​:java.lang.NullPointerException: Attempt to invoke virtual method 'void com.google.android .gms.maps.SupportMapFragment.getMapAsync(com.google.android.gms.maps.OnMapReadyCallback)' 在 com.example.usuari.myapplication3.ViatgeDetallViewFragment.onCreateView(ViatgeDetallViewFragment.java:82) at android.support 的空对象引用上.v4.app.Fragment.performCreateView(Fragment.java:2074) at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1104) at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java) :1286) 在 android.support.v4.app.BackStackRecord.run(BackStackRecord.java:758) 在 android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1671) 在 android.support.v4.app。 FragmentController.execPendingActions(FragmentController.java:388) 在 android.support.v4.app.FragmentActivity.onStart(FragmentActivity.java:619) at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1265) at android.app.Activity.performStart(Activity.java:6915) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3217) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3350) at android.app.ActivityThread.access$1100(ActivityThread.java:222) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1795) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:158) at android.app.ActivityThread.main(ActivityThread.java:7229) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120) 03-24 02:55:53.871 6390-7362/com.example.usuari.myapplication3 W/DynamiteModule: Local module descriptor class for com.google.android.gms.googlecertificates not found.在 android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1265) 在 android.app.Activity.performStart(Activity.java:6915) 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3217) 在 android.app。 ActivityThread.handleLaunchActivity(ActivityThread.java:3350) at android.app.ActivityThread.access$1100(ActivityThread.java:222) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1795) at android.os.Handler。 dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:158) at android.app.ActivityThread.main(ActivityThread.java:7229) at java.lang.reflect.Method.invoke(Native)方法)在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120) 03-24 02:55:53.871 6390-7362/com.example.usuari.myapplication3 W/DynamiteModule:未找到 com.google.android.gms.googlecertificates 的本地模块描述符类。 03-24 02:55:53.881 6390-7362/com.example.usuari.myapplication3 I/DynamiteModule: Considering local module com.google.android.gms.googlecertificates:0 and remote module com.google.android.gms.googlecertificates:2 03-24 02:55:53.881 6390-7362/com.example.usuari.myapplication3 I/DynamiteModule: Selected remote version of com.google.android.gms.googlecertificates, version 03-24 02:55:53.881 6390-7362/com.example.usuari.myapplication3 I/DynamiteModule:考虑本地模块 com.google.android.gms.googlecertificates:0 和远程模块 com.google.android.gms.googlecertificates: 2 03-24 02:55:53.881 6390-7362/com.example.usuari.myapplication3 I/DynamiteModule:com.google.android.gms.googlecertificates 的选定远程版本,版本

= 2 03-24 02:55:53.881 6390-7362/com.example.usuari.myapplication3 W/ResourcesManager: getTopLevelResources: /data/user/0/com.google.android.gms/app_chimera/m/00000005/DynamiteModulesA_GmsCore_prodmnc_alldpi_release.apk / 1.0 running in com.example.usuari.myapplication3 rsrc of package com.example.usuari.myapplication3 03-24 02:55:53.891 6390-7362/com.example.usuari.myapplication3 D/ResourcesManager: For user 0 new overlays fetched Null 03-24 02:55:53.891 6390-7362/com.example.usuari.myapplication3 W/ResourcesManager: getTopLevelResources: /data/user/0/com.google.android.gms/app_chimera/m/00000005/DynamiteModulesA_GmsCore_prodmnc_alldpi_release.apk / 1.0 running in com.example.usuari.myapplication3 rsrc of package com.example.usuari.myapplication3 = 2 03-24 02:55:53.881 6390-7362/com.example.usuari.myapplication3 W/ResourcesManager:getTopLevelResources:/data/user/0/com.google.android.gms/app_chimera/m/00000005/DynamiteCorerelease_usuari.myapplication3 W/ResourcesManager apk / 1.0 运行在 com.example.usuari.myapplication3 rsrc of package com.example.usuari.myapplication3 03-24 02:55:53.891 6390-7362/com.example.usuari.myapplication3 D/ResourcesManager:对于用户 0 新覆盖获取空 03-24 02:55:53.891 6390-7362/com.example.usuari.myapplication3 W/ResourcesManager: getTopLevelResources: /data/user/0/com.google.android.gms/app_chimera/m/00000005/DynamiteMoallms_mdulesApi apk / 1.0 在 com.example.usuari.myapplication3 rsrc 包 com.example.usuari.myapplication3 中运行

Your mapFragment is null. 您的mapFragment为null。 Try this: 尝试这个:

@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
 super.onViewCreated(view, savedInstanceState);
MapFragment mapFragment = (MapFragment) getActivity().getFragmentManager().findFragmentById(R.id.fragment_view_map);
}

Latest update of Google for Maps, only MapView is supported for fragments. 谷歌地图的最新更新,只有片段支持MapView。

For more Info clink here 有关更多信息,请点击此处

if the above solution does not work, try this. 如果上述解决方案不起作用,请尝试此操作。 Add this in your map fragment 在地图片段中添加此项

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

        View view = inflater.inflate(R.layout.fragment_view, container, false);

        SupportMapFragment map = (SupportMapFragment) getChildFragmentManager().findFragmentById(R.id.map);
        map.getMapAsync(this);
        return view;
    }

And then add this in your calling activity. 然后在您的通话活动中添加此项。 because add method was not working so i tried replace method and it works seemlessly. 因为添加方法不起作用所以我尝试替换方法,它无缝地工作。

protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_view);


fragment = new MapsActivity();
FragmentManager fm = getSupportFragmentManager();
FragmentTransaction ft = fm.beginTransaction();
ft.replace(R.id.activity_fragment_view, fragment);
ft.commit();

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM