Google Map Fragment + FragmentPagerAdapter拒绝协调

时间:2014-10-12 11:42:56

标签: android android-fragments

我这里有一个简单的场景。

案例

1)一个容纳三个片段的FragmentStateAdapter

    @Override
public Fragment getItem(int position) {

    Fragment fragment = null;
    switch (position) {
    case 0:
        fragment=new LocationFragment();
        break;
    case 1:
        fragment=new CongestFrag();
        break;
    case 2:
        fragment=new SubcribedFrag();
        break;
    default:
        break;
    }
    return fragment;
}

位置片段顾名思义,将包含一个谷歌地图片段。这个XML将是

<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"
android:background="@color/off_white"
tools:context=".MainActivity" >

<TextView
    android:id="@+id/fragment_title"
    android:layout_width="@dimen/fragments_title_view_width"
    android:layout_height="@dimen/fragments_title_view_height"
    android:text="@string/location_fragment_title" 
    android:textSize="@dimen/fragments_title_text_size"
    android:fontFamily="sans-serif-light"/>

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

类似地,其他片段仅包含一个textviews。

问题

我们都知道,当我们在片段列表中继续或撤退时,viewpager会立即破坏并重新创建片段。这对我来说很好。我不希望使用 setOffscreenPageLimit 来强制片段留在内存中。

问题在于LocationFragment。应用程序从LocationFragment开始,正确显示地图。这就是我接下来的方式

LocationFragment - &gt; CongestFrag - &gt; SubcribedFrag

一切正常。现在,当我反过来。

SubscribedFrag-&gt; CongestFrag。 OnCreateView for LocationFragment的程序断点命中,它给出了这个堆栈跟踪

10-12 15:26:21.096: E/AndroidRuntime(17122): Caused by: java.lang.IllegalArgumentException: Binary XML file line #16: Duplicate id 0x7f060010, tag null, or parent id 0xffffffff with another fragment for com.google.android.gms.maps.MapFragment

当我从片段列表底部走向LocationFragment时,这是破坏(LocationFragment.java)的代码

    @Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
    // TODO Auto-generated method stub

    mFragmentView =inflater.inflate(R.layout.location_fragment, container, false);

                //code breaks above 

     mMap.addMarker(new MarkerOptions().position(new LatLng(Globals.LocationFragment.DEFAULT_LAT, Globals.LocationFragment.DEFAULT_LONG)).title("Marker"));
        mMap.animateCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(Globals.LocationFragment.DEFAULT_LAT, Globals.LocationFragment.DEFAULT_LONG), 8.0f));

    /*Just a container to keep the width and height . See usage*/
    mSize = new Point();


    initProperties();
    initControls();
    return mFragmentView;
}

投机 似乎该片段之前没有被正确销毁,并且android正在两次膨胀相同的视图。但那没有道理。请帮助我。

谢谢

1 个答案:

答案 0 :(得分:0)

我重复了一遍。我发现了一个类似的帖子已经有很多解决方案应该研究得更好。如果它对任何人感兴趣,请点击“Duplicate ID, tag null, or parent id with another fragment for com.google.android.gms.maps.MapFragment