У меня здесь простой сценарий.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
«Мы все знаем, что когда мы идем или отступаем в списке фрагментов, viewpager ничтожно разрушает и воссоздает фрагменты» - нет, это не так. 'ViewPager' ничего не знает о фрагментах. «FragmentPagerAdapter» и «FragmentStatePagerAdapter» знают о фрагментах, и только последний уничтожит и воссоздает эти фрагменты на основе навигации по страницам. Я бы не ожидал, что он уничтожит что-нибудь только с тремя страницами. – CommonsWare
Возможный дубликат [Duplicate ID, tag null или родительский идентификатор с другим фрагментом для com.google.android.gms.maps.MapFragment] (http://stackoverflow.com/questions/14083950/duplicate-id-tag-null -или-родитель-ID-с-другим-фрагмент-за-COM-Google-Androi) – Simas