7

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.

+0

mogę wiedzieć, dlaczego używasz 'DepthPAgeTransformer' ... i wysłać fragment kodu również – bGorle

+0

Używam go tylko wprowadzić pewne szczególne wydarzenie podczas przewijania pager. Usunąłem go, ale nadal mam problem. – bilbinight

+0

Co to jest potrzeba tworzenia widoku root jako obiektu globalnego i dlaczego robisz to jako zerowy. – bGorle

Odpowiedz

0

W końcu zrobiłem to z DialogFragmentami, ponieważ musiałem iść naprzód. W każdym razie byłoby wspaniale, gdyby ktokolwiek wiedział o tym, jak przezwyciężyć problem w sposób wyjaśniony w pytaniu dotyczącym przyszłych wydarzeń.

Dzięki

Powiązane problemy