2016-04-28 12 views
0

Ich habe eine Navigationsschublade mit 4 Elementen (Home, Einstellungen, über, Hilfe). Bei einem Klick auf den Gegenstand ersetzt das dem Gegenstand entsprechende Fragment den anderen.Keeping Seekbar Werte beim Ersetzen von Fragment

Nun, ich habe diese Einstellungen Fragment mit 3 seekbar, wenn ein Benutzer den Wert des seekbar ändern und, nachdem er die Schublade Navigation öffnen, und klicken Sie nach Hause und kommt zurück Fragment zu Einstellung der seekbar auf 0"

ist zurück

Wie halte ich die seekBar im gleichen Zustand vor dem Fragment zu ändern.

Dies ist der Code, wenn die Ansicht in dem Fragment erstellen, ich glaube, das Problem ist, weil ich Ansicht aufzublasen.

I saveInstanceState versuchen, aber ich denke, die Instanz ist nie zu zerstören und das ist, warum, wenn ich de Code ausführen saveInstanceState ist nie cal LED.

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
    myFragmentView = inflater.inflate(R.layout.fragment_param, container, false); 
    seekbarAffValeur(); 
    return myFragmentView; 
} 

Das ist mein Code, wenn ich Fragmente ändere.

navigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() { 
     @Override 
     public boolean onNavigationItemSelected(MenuItem item) { 
      switch (item.getItemId()) { 
       case R.id.home_id: 
        fragmentTransaction = getSupportFragmentManager().beginTransaction(); 
        fragmentTransaction.replace(R.id.main_container, new AcceuilFragment()); 
        fragmentTransaction.commit(); 
        getSupportActionBar().setTitle("Acceuil"); 
        item.setChecked(true); 
        drawerLayout.closeDrawers(); 
        break; 

       case R.id.setting_id: 
        fragmentTransaction = getSupportFragmentManager().beginTransaction(); 
        fragmentTransaction.replace(R.id.main_container, new ParamFragment()); 
        fragmentTransaction.commit(); 
        getSupportActionBar().setTitle("Paramètres"); 
        item.setChecked(true); 
        drawerLayout.closeDrawers(); 

        break; 
       case R.id.about_id: 
        fragmentTransaction = getSupportFragmentManager().beginTransaction(); 
        fragmentTransaction.replace(R.id.main_container, new ProposFragment()); 
        fragmentTransaction.commit(); 
        getSupportActionBar().setTitle("À propos"); 
        item.setChecked(true); 
        drawerLayout.closeDrawers(); 
        break; 
       case R.id.help_id: 
        fragmentTransaction = getSupportFragmentManager().beginTransaction(); 
        fragmentTransaction.replace(R.id.main_container, new AideFragment()); 
        fragmentTransaction.commit(); 
        getSupportActionBar().setTitle("Aide"); 
        item.setChecked(true); 
        drawerLayout.closeDrawers(); 
        break; 
      } 

Vielen Dank.


Ok, ich fand eine Lösung, ziemlich einfach endlich.

private static int disPosiVal; 
private static int disCarteVal; 
private static int minPosiVal; 
//Pour afficher la valeur des SeekBar. 
public void seekbarAffValeur(){ 
    skbDisPosiValu = (SeekBar) myFragmentView.findViewById(R.id.skbDisPosi); 
    tvDisPosi = (TextView) myFragmentView.findViewById(R.id.tvValeurDisPosi); 
    skbDisCarteValu = (SeekBar) myFragmentView.findViewById(R.id.skbDisCarte); 
    tvDisCarte = (TextView) myFragmentView.findViewById(R.id.tvValeurDisCarte); 
    skbMinuValue = (SeekBar) myFragmentView.findViewById(R.id.skbMinPosi); 
    tvMinuValu = (TextView) myFragmentView.findViewById(R.id.tvValeurMinPosio); 

    skbDisPosiValu.setProgress(disPosiVal); 
    tvDisPosi.setText(disPosiVal+ ""); 
    skbDisCarteValu.setProgress(disCarteVal); 
    tvDisCarte.setText(disCarteVal+""); 
    skbMinuValue.setProgress(minPosiVal); 
    tvMinuValu.setText(minPosiVal+""); 

    skbDisPosiValu.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { 
     @Override 
     public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { 
      disPosiVal = progress; 
      tvDisPosi.setText(progress + ""); 
     } 

     @Override 
     public void onStartTrackingTouch(SeekBar seekBar) { 
     } 

     @Override 
     public void onStopTrackingTouch(SeekBar seekBar) { 
      tvDisPosi.setText(disPosiVal + ""); 

     } 

    }); 
    skbDisCarteValu.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { 
     @Override 
     public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { 
      disCarteVal = progress; 
      tvDisCarte.setText(progress + ""); 
     } 
     @Override 
     public void onStartTrackingTouch(SeekBar seekBar) { 
     } 
     @Override 
     public void onStopTrackingTouch(SeekBar seekBar) { 
      tvDisCarte.setText(disCarteVal + ""); 
     } 
    }); 
    skbMinuValue.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { 
     @Override 
     public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { 
      minPosiVal = progress; 
      tvMinuValu.setText(progress + ""); 
     } 
     @Override 
     public void onStartTrackingTouch(SeekBar seekBar) { 
     } 
     @Override 
     public void onStopTrackingTouch(SeekBar seekBar) { 
      tvMinuValu.setText(minPosiVal + ""); 
     } 
    }); 

Die Aussicht ist zerstören aber nicht die Fragmente (glaube ich), so dass ich nur meinen Wert in einer statischen Variablen speichern und wenn die Ansicht erstellt wird, ich Wert gesetzt, wo sie gehören.

+0

Wo setzen Sie den Wert seekbar? Es wäre auch hilfreich, wenn Sie den Code gepostet haben, wo Sie das angezeigte Fragment ändern. – fractalwrench

+0

Der Wert wird festgelegt, wenn ein Benutzer den Fortschritt der Suchleiste ändert. Ich bearbeite meine Antwort, um klarer zu sein. Ich werde den Code hinzufügen, wenn ich später am Abend mein Fragment ändere, danke. –

+0

Haben Sie meine Lösung unten versucht? –

Antwort

0

Ich denke, das ist die Frage - fragmentTransaction.replace(R.id.main_container, new AcceuilFragment());

Sie sind im Grunde das alte Fragment zu entfernen. Was Sie tun müssen, ist

fragmentTransaction.replace(R.id.main_container, new AcceuilFragment().addToBackStack(null).commit(); 

addToBackStack() legt im Grunde Fragmente auf einem Stapel. So können Sie popBackStack() aufrufen, um das Fragment zu holen. enter code here

Dokumentation:

FragmentManager popBackStack

FragmentTransaction addToBackStack

Verwandte Themen