8

У меня возникли проблемы с изменением ориентации экрана с помощью ViewPager и FragmentPagerAdapter. Он отлично работает при запуске приложения, но фрагменты внутри viewpager не видны после изменения ориентации (возможно, потеряны). Как исправить эту проблему. Ниже приводится структура моей деятельности: enter image description hereОбработка изменения ориентации с помощью ViewPager + FragmentPagerAdapter

редактировать: Это файл манифеста

<?xml version="1.0" encoding="utf-8"?> 

<uses-permission android:name="android.permission.INTERNET" /> 
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
<uses-permission android:name="android.permission.GET_ACCOUNTS" /> 
<uses-permission android:name="android.permission.USE_CREDENTIALS" /> 

<application 
    android:name="com.test.myapp.NetworkManager.TBVolleyInstance" 
    android:allowBackup="true" 
    android:icon="@drawable/launcher" 
    android:label="@string/app_name" 
    android:theme="@style/CustomActionBarTheme"> 
    <meta-data 
     android:name="com.google.android.gms.version" 
     android:value="@integer/google_play_services_version" /> 

    <activity 
     android:name=".Home" 
     android:label="@string/app_name" 
     android:windowSoftInputMode="adjustNothing" > 
    </activity> 
    <activity 
     android:name=".RouterActivity" 
     android:label="@string/app_name" > 
     <intent-filter android:label="@string/app_name" > 
      <action android:name="android.intent.action.MAIN" /> 

      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 
</application> 

реализация FragmentPagerAdapter:

public class PagerAdapter extends FragmentPagerAdapter{ 

public PagerAdapter(FragmentManager fm) { 
    super(fm); 

} 

@Override 
public Fragment getItem(int index) { 

    switch (index) { 
    case 0: 
     return new Fragment1(); 
    case 1: 
     return new Fragment2(); 
    } 
    return null; 
} 

@Override 
public int getCount() { 
    return 2; 
} 

@Override 
public float getPageWidth(int position){ 
    return(1.0f); 
} 

}

+1

попытайтесь следовать этому руководству https://github.com/codepath/android_guides/wiki/ViewPager-with-FragmentPagerAdapter –

ответ

5

Немного поздно, но я просто устранили эту точную проблему на моем приложении. Существует два решения.

1) Вы должны использовать FragmentStatePagerAdapter, а не FragmentPagerAdapter

Или

2) Если ваш ViewPager заворачивают в фрагмент (как ваши изображения показывает), то при создании адаптера в ViewPager, в вы должны использовать getChildFragmentManager(), а не getSupportFragmentManager().

Надеюсь, это поможет кому-то, так как это потребовало целого дня пыток, чтобы понять это.

+1

getChildFragmentManager() был ключом! – Gomino

+0

getChildFragmentManager(), вы потрясающий. –