谷歌地图V2在片段的现金点击两次时, [英] Google Maps v2 In fragment cashes when clicked twice

查看:145
本文介绍了谷歌地图V2在片段的现金点击两次时,的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我试图建立谷歌地图在我的应用程序与标记的片段中。它的工作原理,当我点击它的第一次,但是当我在另一个片段点击然后回到谷歌地图之一,它崩溃。不知道是什么问题?任何帮助将是真棒,只是初学者。

下面有code:

XML

 < XML版本=1.0编码=UTF-8&GT?;
<片段的xmlns:机器人=htt​​p://schemas.android.com/apk/res/android
机器人:ID =@ + ID /图
机器人:layout_width =match_parent
机器人:layout_height =match_parent
机器人:名称=com.google.android.gms.maps.SupportMapFragment/>
 

Java的谷歌地图片段编辑工作code以下

 公共类Fragment_8扩展片段{

static final的经纬度BottleCapp =新的经纬度(51.371986,0.065593);
  私人GoogleMap的地图;
  私有静态视图中查看;

  @覆盖
  公共查看onCreateView(LayoutInflater充气,容器的ViewGroup,捆绑savedInstanceState){
      如果(查看!= NULL){
          ViewGroup中父=(ViewGroup中)view.getParent();
          如果(父!= NULL)
              parent.removeView(视图);
      }
      尝试 {
          鉴于= inflater.inflate(R.layout.fragment_8,集装箱,假);
      }赶上(InflateException E){
          / *地图已经存在,只是返回观点,因为它是* /
      }
    地图=((SupportMapFragment)getFragmentManager()findFragmentById(R.id.map)。)的GetMap()。

        标记bottleapp = map.addMarker(新MarkerOptions()。位置(BottleCapp)
            .title伪(BottleCapp));


        //瞬间移动相机Bottlecapp与15变焦。
        map.moveCamera(CameraUpdateFactory.newLatLngZoom(BottleCapp,15));

        //放大,相机动画。
        map.animateCamera(CameraUpdateFactory.zoomTo(10),2000,NULL);
        。getActivity()getSupportFragmentManager()popBackStack()。
        返回查看;

    }
  }
 

错误

  06-15 21:53:46.673:E / AndroidRuntime(8677):致命异常:主要
 06-15 21:53:46.673:E / AndroidRuntime(8677):android.view.InflateException:二进制XML文件中的行#2:错误充气类片段
 06-15 21:53:46.673:E / AndroidRuntime(8677):在android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:704)
 06-15 21:53:46.673:E / AndroidRuntime(8677):在android.view.LayoutInflater.inflate(LayoutInflater.java:466)
 06-15 21:53:46.673:E / AndroidRuntime(8677):在android.view.LayoutInflater.inflate(LayoutInflater.java:396)
 06-15 21:53:46.673:E / AndroidRuntime(8677):在com.bottlecapp.bottlecapp.Fragment_8.onCreateView(Fragment_8.java:29)
 06-15 21:53:46.673:E / AndroidRuntime(8677):在android.support.v4.app.Fragment.performCreateView(Fragment.java:1460)
 06-15 21:53:46.673:E / AndroidRuntime(8677):在android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:911)
 06-15 21:53:46.673:E / AndroidRuntime(8677):在android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1088)
 06-15 21:53:46.673:E / AndroidRuntime(8677):在android.support.v4.app.BackStackRecord.run(BackStackRecord.java:682)
 06-15 21:53:46.673:E / AndroidRuntime(8677):在android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1444)
 06-15 21:53:46.673:E / AndroidRuntime(8677):在android.support.v4.app.FragmentManagerImpl $ 1.运行(FragmentManager.java:429)
 06-15 21:53:46.673:E / AndroidRuntime(8677):在android.os.Handler.handleCallback(Handler.java:725)
 06-15 21:53:46.673:E / AndroidRuntime(8677):在android.os.Handler.dispatchMessage(Handler.java:92)
 06-15 21:53:46.673:E / AndroidRuntime(8677):在android.os.Looper.loop(Looper.java:137)
 06-15 21:53:46.673:E / AndroidRuntime(8677):在android.app.ActivityThread.main(ActivityThread.java:5041)
 06-15 21:53:46.673:E / AndroidRuntime(8677):在java.lang.reflect.Method.invokeNative(本机方法)
 06-15 21:53:46.673:E / AndroidRuntime(8677):在java.lang.reflect.Method.invoke(Method.java:511)
 06-15 21:53:46.673:E / AndroidRuntime(8677):在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:793)
 06-15 21:53:46.673:E / AndroidRuntime(8677):在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
 06-15 21:53:46.673:E / AndroidRuntime(8677):在dalvik.system.NativeStart.main(本机方法)
 06-15 21:53:46.673:E / AndroidRuntime(8677):与另一个片段com.google重复ID 0x7f05003c,标记为空,或父ID为0x0:致:java.lang.IllegalArgumentException:如果二进制XML文件中的行#2 .android.gms.maps.SupportMapFragment
 06-15 21:53:46.673:E / AndroidRuntime(8677):在android.support.v4.app.FragmentActivity.onCreateView(FragmentActivity.java:285)
 06-15 21:53:46.673:E / AndroidRuntime(8677):在android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:676)
 06-15 21:53:46.673:E / AndroidRuntime(8677):18 ...更多
 

解决方案

从由psented的code $ P $您在这里有您所要使用的对象的某些错误,你把它们组合起来。我说的是,你在你的XML布局文件中使用 MapFragment 目标:

 类=com.google.android.gms.maps.MapFragment
 

如果您的XML的使用 MapFragment 然后我不明白你为什么要试图获得 SupportMapFragment 在活动code的对象:

 地图=((SupportMapFragment)getFragmentManager()findFragmentById(R.id.map)。)的GetMap()。
 

这将是很好看什么API级别,你的目标为你的应用程序,但你需要决定要支持与API V11和更低的设备惠特或者你想只支持API V12高。如果你想支持API V11,下看看这个博客后,我写在你的应用程序中集成谷歌API V2图:

谷歌地图API V2

我求你只支持高版本然后更改活动code到这一点:

 地图=((MapFragment)getFragmentManager()findFragmentById(R.id.map)。)的GetMap()。
 

和相应地改变你的清单文件。

I'm trying to set up Google maps in my app inside a fragment with a marker. It works when I click on it the first time but when I click on another fragment then back to the Google maps one it crashes. Not sure what the issue is? Any help would be awesome, only beginner.

Heres code:

Xml

<?xml version="1.0" encoding="utf-8"?>
<fragment xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/map"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:name="com.google.android.gms.maps.SupportMapFragment"/>

Java google maps fragment EDIT WORKING CODE BELOW

public class Fragment_8 extends Fragment{

static final LatLng BottleCapp = new LatLng(51.371986, 0.065593);
  private GoogleMap map;
  private static View view;

  @Override
  public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
      if (view != null) {
          ViewGroup parent = (ViewGroup) view.getParent();
          if (parent != null)
              parent.removeView(view);
      }
      try {
          view = inflater.inflate(R.layout.fragment_8, container, false);
      } catch (InflateException e) {
          /* map is already there, just return view as it is */
      }
    map = ((SupportMapFragment)getFragmentManager().findFragmentById(R.id.map)).getMap();

        Marker bottleapp = map.addMarker(new MarkerOptions().position(BottleCapp)
            .title("BottleCapp"));


        // Move the camera instantly to Bottlecapp with a zoom of 15.
        map.moveCamera(CameraUpdateFactory.newLatLngZoom(BottleCapp, 15));

        // Zoom in, animating the camera.
        map.animateCamera(CameraUpdateFactory.zoomTo(10), 2000, null);
        getActivity().getSupportFragmentManager().popBackStack();
        return view;

    }
  }

Error

 06-15 21:53:46.673: E/AndroidRuntime(8677): FATAL EXCEPTION: main
 06-15 21:53:46.673: E/AndroidRuntime(8677): android.view.InflateException: Binary XML file line #2: Error inflating class fragment
 06-15 21:53:46.673: E/AndroidRuntime(8677):    at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:704)
 06-15 21:53:46.673: E/AndroidRuntime(8677):    at android.view.LayoutInflater.inflate(LayoutInflater.java:466)
 06-15 21:53:46.673: E/AndroidRuntime(8677):    at android.view.LayoutInflater.inflate(LayoutInflater.java:396)
 06-15 21:53:46.673: E/AndroidRuntime(8677):    at com.bottlecapp.bottlecapp.Fragment_8.onCreateView(Fragment_8.java:29)
 06-15 21:53:46.673: E/AndroidRuntime(8677):    at android.support.v4.app.Fragment.performCreateView(Fragment.java:1460)
 06-15 21:53:46.673: E/AndroidRuntime(8677):    at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:911)
 06-15 21:53:46.673: E/AndroidRuntime(8677):    at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1088)
 06-15 21:53:46.673: E/AndroidRuntime(8677):    at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:682)
 06-15 21:53:46.673: E/AndroidRuntime(8677):    at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1444)
 06-15 21:53:46.673: E/AndroidRuntime(8677):    at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:429)
 06-15 21:53:46.673: E/AndroidRuntime(8677):    at android.os.Handler.handleCallback(Handler.java:725)
 06-15 21:53:46.673: E/AndroidRuntime(8677):    at android.os.Handler.dispatchMessage(Handler.java:92)
 06-15 21:53:46.673: E/AndroidRuntime(8677):    at android.os.Looper.loop(Looper.java:137)
 06-15 21:53:46.673: E/AndroidRuntime(8677):    at android.app.ActivityThread.main(ActivityThread.java:5041)
 06-15 21:53:46.673: E/AndroidRuntime(8677):    at java.lang.reflect.Method.invokeNative(Native Method)
 06-15 21:53:46.673: E/AndroidRuntime(8677):    at java.lang.reflect.Method.invoke(Method.java:511)
 06-15 21:53:46.673: E/AndroidRuntime(8677):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
 06-15 21:53:46.673: E/AndroidRuntime(8677):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
 06-15 21:53:46.673: E/AndroidRuntime(8677):    at dalvik.system.NativeStart.main(Native Method)
 06-15 21:53:46.673: E/AndroidRuntime(8677): Caused by: java.lang.IllegalArgumentException: Binary XML file line #2: Duplicate id 0x7f05003c, tag null, or parent id 0x0 with another fragment for com.google.android.gms.maps.SupportMapFragment
 06-15 21:53:46.673: E/AndroidRuntime(8677):    at android.support.v4.app.FragmentActivity.onCreateView(FragmentActivity.java:285)
 06-15 21:53:46.673: E/AndroidRuntime(8677):    at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:676)
 06-15 21:53:46.673: E/AndroidRuntime(8677):    ... 18 more

解决方案

From the code presented by your here there is some mistake in the objects you are trying to use and you are mixing them up. I'm talking about the MapFragment object that you are using in your xml layout file:

class="com.google.android.gms.maps.MapFragment"

if in your xml your are using MapFragment then I don't see why you are trying to get a SupportMapFragment object in your activity code:

 map = ((SupportMapFragment)getFragmentManager().findFragmentById(R.id.map)).getMap();

It would be nice to see what API level you are targeting your application for, but you need to decide wheater you want to support devices with API V11 and lower or you want to support only API V12 and higher. If you want to support API V11 and lower check out this blog post I wrote on integrating Google API V2 map in your application:

Google Maps API V2

I you seek to support only the higher version then change activity code to this:

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

and change your manifest file accordingly.

这篇关于谷歌地图V2在片段的现金点击两次时,的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆