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ückWie 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.
Wo setzen Sie den Wert seekbar? Es wäre auch hilfreich, wenn Sie den Code gepostet haben, wo Sie das angezeigte Fragment ändern. – fractalwrench
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. –
Haben Sie meine Lösung unten versucht? –