2014-10-12 5 views
0

У меня здесь простой сценарий.Google Map Fragment + FragmentPagerAdapter отказывается согласовывать

Case

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; 
} 

Место фрагментированных, как следует из названия, будет вмещать отображение фрагмента Google. 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 niftly разрушает и воссоздает фрагменты. Для меня это правда. Я не хочу использовать setOffscreenPageLimit, чтобы заставить фрагменты оставаться в памяти.

Проблема с LocationFragment. Приложение начинается с LocationFragment, который правильно отображает карту. Это, как я продолжу тогда

LocationFragment -> CongestFrag -> SubcribedFrag

Все работает отлично. Теперь, когда я прихожу наоборот.

SubscribFrag-> CongestFrag. Программа для останова OnCreateView для 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.java), когда я прийти к LocationFragment из нижней части списка фрагмента

@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; 
} 

Спекуляция Похоже, что фрагмент ранее не был должным образом уничтожен, и андроид дважды раздувает один и тот же вид. Но это не имеет смысла. Пожалуйста, помогите мне в этом.

Thanks

+0

«Мы все знаем, что когда мы идем или отступаем в списке фрагментов, viewpager ничтожно разрушает и воссоздает фрагменты» - нет, это не так. 'ViewPager' ничего не знает о фрагментах. «FragmentPagerAdapter» и «FragmentStatePagerAdapter» знают о фрагментах, и только последний уничтожит и воссоздает эти фрагменты на основе навигации по страницам. Я бы не ожидал, что он уничтожит что-нибудь только с тремя страницами. – CommonsWare

+0

Возможный дубликат [Duplicate ID, tag null или родительский идентификатор с другим фрагментом для com.google.android.gms.maps.MapFragment] (http://stackoverflow.com/questions/14083950/duplicate-id-tag-null -или-родитель-ID-с-другим-фрагмент-за-COM-Google-Androi) – Simas

ответ