android – 当方向改变时,ViewPager内部的碎片消失

前端之家收集整理的这篇文章主要介绍了android – 当方向改变时,ViewPager内部的碎片消失前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我已经阅读了几篇关于此的帖子( http://tinyurl.com/pb8es74,http://tinyurl.com/p9pcfcv...)但找不到解决方案.

我有一个MainActivity,它加载一个包含ViewPager的布局,其中包含三个片段(根据方向有不同的布局).

我已将此功能添加到活动中,因此当方向更改时它不会被销毁,因为我可能会打开一些对话框或弹出窗口:

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

因此,我已经覆盖了方法“onConfigurationChanged”,它只调用方法loadLayout,其中有关视图的所有内容

  1. private void loadLayout() {
  2. setContentView(R.layout.layout_main_activity);
  3.  
  4. pager = (ViewPager) this.findViewById(R.id.pager);
  5. pager.setPageTransformer(true,new DepthPageTransformer());
  6.  
  7. adapter = new MyFragmentPagerAdapter(getSupportFragmentManager());
  8. adapter.addFragment(Fragment1.getInstance());
  9. adapter.addFragment(Fragment2.getInstance());
  10. adapter.addFragment(Fragment3.getInstance());
  11.  
  12. pager.setAdapter(adapter);
  13. pager.setOffscreenPageLimit(2);
  14.  
  15. //Media controllers
  16. imgMediaController= (ImageButton) findViewById(R.id.media_controller);
  17.  
  18. imgMediaController.setOnClickListener(new View.OnClickListener() {
  19. public void onClick(View v) {
  20. [...]
  21. }
  22. });
  23.  
  24. imgVolumeController= (ImageButton) findViewById(R.id.volume_controller);
  25. gM.setImgVolumeController(imgVolumeController);
  26.  
  27. imgVolumeController.setOnClickListener(new View.OnClickListener() {
  28. public void onClick(View v) {
  29. [...]
  30. }
  31. });
  32. }

片段的代码是相同的:

  1. public class FragmentNature extends Fragment {
  2.  
  3. private static FragmentNature instance;
  4. private SoundManager sM;
  5. private View rootView;
  6. Hashtable<String,ImageButton> h_Images;
  7. private Handler repeatUpdateHandler = new Handler();
  8. private Toast volumeToast;
  9.  
  10.  
  11. public static FragmentNature getInstance() {
  12. if (instance == null)
  13. instance = new FragmentNature();
  14. return instance;
  15. }
  16.  
  17. public void nullInstance() {
  18. instance=null;
  19. }
  20.  
  21. public FragmentNature(){
  22. h_Images=new Hashtable<String,ImageButton>();
  23. }
  24.  
  25. public void onCreate(Bundle savedInstanceState) {
  26. Log.d("Naturing","On create->Estoy en el fragment nature");
  27. super.onActivityCreated(savedInstanceState);
  28. sM=SoundManager.getInstance();
  29. }
  30.  
  31. public View onCreateView(LayoutInflater inflater,ViewGroup container,Bundle savedInstanceState) {
  32.  
  33.  
  34. rootView=null;
  35. Log.d("Naturing","On createView->Estoy en el fragment nature");
  36. rootView = inflater.inflate(R.layout.fragment_nature,container,false);
  37.  
  38. final ImageButton imgRain= (ImageButton) rootView.findViewById(R.id.n_rain);
  39. h_Images.put("n_rain",imgRain);
  40. imgRain.setImageResource(R.drawable.n_rainsel);
  41.  
  42. final ImageButton imgRiver= (ImageButton) rootView.findViewById(R.id.n_river);
  43. imgRiver.setImageResource(R.drawable.n_riversel);
  44.  
  45. final ImageButton imgWave= (ImageButton) rootView.findViewById(R.id.n_wave);
  46. h_Images.put("n_wave",imgWave);
  47. imgWave.setImageResource(R.drawable.n_wavesel);
  48.  
  49. final ImageButton imgWind= (ImageButton) rootView.findViewById(R.id.n_wind);
  50. h_Images.put("n_wind",imgWind);
  51. imgWind.setImageResource(R.drawable.n_windsel);
  52.  
  53. final ImageButton imgFire= (ImageButton) rootView.findViewById(R.id.n_fire);
  54. h_Images.put("n_fire",imgFire);
  55. imgFire.setImageResource(R.drawable.n_firesel);
  56.  
  57. final ImageButton imgTree= (ImageButton) rootView.findViewById(R.id.n_tree);
  58. h_Images.put("n_tree",imgTree);
  59. imgTree.setImageResource(R.drawable.n_treesel);
  60.  
  61. final ImageButton imgStorm= (ImageButton) rootView.findViewById(R.id.n_storm);
  62. h_Images.put("n_storm",imgStorm);
  63. imgStorm.setImageResource(R.drawable.n_stormsel);
  64.  
  65. final ImageButton imgDrop= (ImageButton) rootView.findViewById(R.id.n_drop);
  66. h_Images.put("n_drop",imgDrop);
  67. imgDrop.setImageResource(R.drawable.n_dropsel);
  68.  
  69. final ImageButton imgDeepSea= (ImageButton) rootView.findViewById(R.id.n_deepsea);
  70. h_Images.put("n_deepsea",imgDeepSea);
  71. imgDeepSea.setImageResource(R.drawable.n_deepseasel);
  72.  
  73. return rootView;
  74. }
  75.  
  76. private boolean isNetworkAvailable(){
  77. Context context=ApplicationManager.getAppContext();
  78. ConnectivityManager connectivityManager=
  79. (ConnectivityManager) context.getSystemService(context.CONNECTIVITY_SERVICE);
  80. NetworkInfo activeNetworkInfo= connectivityManager.getActiveNetworkInfo();
  81. return activeNetworkInfo != null && activeNetworkInfo.isConnected();
  82. }
  83.  
  84. public void changeImageStatus(String sound,int imgId){
  85. Log.d("Naturing","FragmentNature::changeImageStatus | sound= " + sound + " imgId=" + imgId);
  86. h_Images.get(sound).setImageResource(imgId);
  87. }

}

问题是当方向改变时,mainActivity布局被正确加载,但viewPager不是.事实上,它消失了,在它的位置上看不到任何东西.无论如何,viewPager在那里,因为我能够通过它并到达终点(我知道这是因为当你到达菜单的末尾时我可以看到蓝色标志等等).

我也尝试调用片段的OncreateView方法但没有任何变化.

任何的想法?
谢谢和亲切的问候

编辑1

如果我取出“pager.setOffscreenPageLimit(2);”,在方向更改后,当我滚动viewpager一段时间时,片段1和片段3是可见的,但片段2在任何情况下都不会出现.我知道它并不多,但万一它会暗示任何人.

编辑2

如果我取出Manifest中的行,它可以正常工作,因为它调用MainActivity和Fragment的onCreateView.但是我需要清单中的那一行.

@H_403_33@

解决方法

最后我用DialogFragments做了,因为我需要继续.
无论如何,如果有人知道如何以我在未来发展的问题中解释的方式解决问题,那就太棒了.

谢谢

@H_403_33@ @H_403_33@

猜你在找的Android相关文章