Przeczytałem kilka postów (http://tinyurl.com/pb8es74, http://tinyurl.com/p9pcfcv...) O tym, ale nie mogę znaleźć rozwiązania.Fragmenty wewnątrz ViewPager znikają po zmianie orientacji
Mam MainActivity, który ładuje układ zawierający ViewPager z trzema fragmentami (które mają różne układy w zależności od orientacji).
Dodałem tę funkcję do działalności, więc nie ulega zniszczeniu podczas zmiany orientacji jak mogę mieć jakieś dialogi lub popips otwarty:
android:configChanges="keyboardHidden|orientation|screenSize|screenLayout|uiMode"
Dlatego mam nadpisać metodę „onConfigurationChanged”, który właśnie wywołuje loadLayout metoda, w której wszystko dotyczące pogląd jest wniosek:
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) {
[...]
}
});
}
Kod dla fragmentów jest równa:
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);
}
}
Problem polega na tym, że podczas zmiany orientacji, układ główną działalność jest prawidłowo załadowany, ale viewPager nie jest. W rzeczywistości znika i nic nie widać na jego miejscu. Tak czy inaczej, viewPager jest tam, ponieważ jestem w stanie przejść przez to i dotrzeć do końca (wiem to, ponieważ widzę niebieski znak, gdy dojdziesz do końca menu i tak).
Próbowałem również wywołać metodę OncreateView fragmentów, ale nic się nie zmienia.
Każdy pomysł? Dzięki i rodzaju chodzi
Edycja 1
Jeśli wziąć „pager.setOffscreenPageLimit (2)” po zmianie orientacji fragmentów 1 i fragment 3 są widoczne kiedy przewijania viewpager na chwilę , ale fragment 2 nie pojawia się w żadnym wypadku. Wiem, że to niewiele, ale na wszelki wypadek.
EDIT 2
Gdybym wyjąć linię w manifeście, to działa ok, gdyż wywołuje onCreateView z główną działalność i fragmentu. Ale potrzebuję linii w manifeście.
mogę wiedzieć, dlaczego używasz 'DepthPAgeTransformer' ... i wysłać fragment kodu również – bGorle
Używam go tylko wprowadzić pewne szczególne wydarzenie podczas przewijania pager. Usunąłem go, ale nadal mam problem. – bilbinight
Co to jest potrzeba tworzenia widoku root jako obiektu globalnego i dlaczego robisz to jako zerowy. – bGorle