Intereting Posts
Вызов функции startActivity () извне контекста активности требует FLAG_ACTIVITY_NEW_TASK Сообщение об ошибке «qemu-system-i386.exe перестает работать» DrawerLayout и ActionBarDrawerToggle не могут быть разрешены для типа Уведомления стека в Kitkat (API 19) с использованием setGroup () не работают Подписывание ароматов продуктов с помощью градиента Автономный режим приложения Android, локальная синхронизация базы данных sqlite с удаленной базой данных Intent.resolveActivity! = Null, но запуск намерения вызывает исключение ActivityNotFound Как загрузить и сохранить изображение в Android Как объединить OnClickListener и OnTouchListener для ImageButton OnOptionsItemSelected не получает вызов при использовании пользовательского вида действий Фильтр яркости экрана Ошибка Eclipse ADT: не удается запустить программу adb Отображение изображений с эффектом карусели в android Как удалить разрешение, добавленное из-за Google Fitness API 7.5.0 Android – альтернатива OpenCV?

Фрагменты внутри ViewPager исчезают при изменении ориентации

Я прочитал несколько сообщений ( http://tinyurl.com/pb8es74 , http://tinyurl.com/p9pcfcv … ) Об этом, но не могу найти решение.

У меня есть MainActivity, который загружает макет, содержащий ViewPager с тремя фрагментами (которые имеют разные макеты в зависимости от ориентации).

Я добавил эту функцию к активности, чтобы она не была разрушена, когда ориентация изменилась, так как я мог бы открыть несколько диалогов или открыток:

android:configChanges="keyboardHidden|orientation|screenSize|screenLayout|uiMode" 

Поэтому я перезаписал метод «onConfigurationChanged», который просто вызывает метод loadLayout, где делается все, что касается представления:

  private void loadLayout() { setContentView(R.layout.layout_main_activity); pager = (ViewPager) this.findViewById(R.id.pager); pager.setPageTransformer(true, new DepthPageTransformer()); adapter = new MyFragmentPagerAdapter(getSupportFragmentManager()); adapter.addFragment(Fragment1.getInstance()); adapter.addFragment(Fragment2.getInstance()); adapter.addFragment(Fragment3.getInstance()); pager.setAdapter(adapter); pager.setOffscreenPageLimit(2); //Media controllers imgMediaController= (ImageButton) findViewById(R.id.media_controller); imgMediaController.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { [...] } }); imgVolumeController= (ImageButton) findViewById(R.id.volume_controller); gM.setImgVolumeController(imgVolumeController); imgVolumeController.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { [...] } }); } 

Код для фрагментов равен:

 public class FragmentNature extends Fragment { private static FragmentNature instance; private SoundManager sM; private View rootView; Hashtable<String, ImageButton> h_Images; private Handler repeatUpdateHandler = new Handler(); private Toast volumeToast; public static FragmentNature getInstance() { if (instance == null) instance = new FragmentNature(); return instance; } public void nullInstance() { instance=null; } public FragmentNature(){ h_Images=new Hashtable<String,ImageButton>(); } public void onCreate(Bundle savedInstanceState) { Log.d("Naturing", "On create->Estoy en el fragment nature"); super.onActivityCreated(savedInstanceState); sM=SoundManager.getInstance(); } public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { rootView=null; Log.d("Naturing", "On createView->Estoy en el fragment nature"); rootView = inflater.inflate(R.layout.fragment_nature, container, false); final ImageButton imgRain= (ImageButton) rootView.findViewById(R.id.n_rain); h_Images.put("n_rain",imgRain); imgRain.setImageResource(R.drawable.n_rainsel); final ImageButton imgRiver= (ImageButton) rootView.findViewById(R.id.n_river); imgRiver.setImageResource(R.drawable.n_riversel); final ImageButton imgWave= (ImageButton) rootView.findViewById(R.id.n_wave); h_Images.put("n_wave",imgWave); imgWave.setImageResource(R.drawable.n_wavesel); final ImageButton imgWind= (ImageButton) rootView.findViewById(R.id.n_wind); h_Images.put("n_wind", imgWind); imgWind.setImageResource(R.drawable.n_windsel); final ImageButton imgFire= (ImageButton) rootView.findViewById(R.id.n_fire); h_Images.put("n_fire", imgFire); imgFire.setImageResource(R.drawable.n_firesel); final ImageButton imgTree= (ImageButton) rootView.findViewById(R.id.n_tree); h_Images.put("n_tree", imgTree); imgTree.setImageResource(R.drawable.n_treesel); final ImageButton imgStorm= (ImageButton) rootView.findViewById(R.id.n_storm); h_Images.put("n_storm", imgStorm); imgStorm.setImageResource(R.drawable.n_stormsel); final ImageButton imgDrop= (ImageButton) rootView.findViewById(R.id.n_drop); h_Images.put("n_drop", imgDrop); imgDrop.setImageResource(R.drawable.n_dropsel); final ImageButton imgDeepSea= (ImageButton) rootView.findViewById(R.id.n_deepsea); h_Images.put("n_deepsea", imgDeepSea); imgDeepSea.setImageResource(R.drawable.n_deepseasel); return rootView; } private boolean isNetworkAvailable(){ Context context=ApplicationManager.getAppContext(); ConnectivityManager connectivityManager= (ConnectivityManager) context.getSystemService(context.CONNECTIVITY_SERVICE); NetworkInfo activeNetworkInfo= connectivityManager.getActiveNetworkInfo(); return activeNetworkInfo != null && activeNetworkInfo.isConnected(); } public void changeImageStatus(String sound, int imgId){ Log.d("Naturing", "FragmentNature::changeImageStatus | sound= " + sound + " imgId=" + imgId); h_Images.get(sound).setImageResource(imgId); } 

}

Проблема в том, что при изменении ориентации макет mainActivity правильно загружается, но viewPager – нет. На самом деле она исчезает, и на ее месте ничего не видно. Во всяком случае, viewPager существует, поскольку я могу пройти через него и дойти до конца (я знаю это, потому что я могу видеть синий знак, когда вы дойдете до конца меню и так далее).

Я также попытался вызвать метод OncreateView для фрагментов, но ничего не изменилось.

Есть идеи? Спасибо и добрые пожелания

ИЗМЕНИТЬ 1

Если я вырву «pager.setOffscreenPageLimit (2);», после изменения ориентации фрагменты 1 и фрагмент 3 будут видны, когда я некоторое время прокручиваю просмотрщик, но фрагмент 2 в любом случае не отображается. Я знаю, что это не так много, но в случае, если это даст нам подсказку.

EDIT 2

Если я вычеркнула строку в манифесте, она будет работать нормально, так как она вызывает onCreateView MainActivity и Fragment. Но мне нужна строка в манифесте.

Solutions Collecting From Web of "Фрагменты внутри ViewPager исчезают при изменении ориентации"

В конце концов я сделал это с DialogFragments, потому что мне нужно было идти вперед. Во всяком случае, было бы здорово, если бы кто-нибудь знал о том, как преодолеть проблему, как я объяснил в вопросе о будущих событиях.

благодаря