2017-07-21 6 views
0

Wenn ich den Bildschirm versuchen Drehen sie die Daten nicht gelöscht wird, aber wenn ich aus der Tätigkeit gehen und den Zählerwert geht auf 0onsaveInstancestate nicht Speichern int Werte

ich die Methode machen Set zurück zurück zum Speichern die Daten, aber es spart immer noch nicht. Warum ist das?

package com.example.navjeevenmann.mytycoon; 

    import android.content.Intent; 
    import android.os.Bundle; 
    import android.os.Handler; 
import android.support.v7.app.AppCompatActivity; 
    import android.view.View; 
    import android.widget.Button; 
    import android.widget.TextView; 


public class MainActivity extends AppCompatActivity { 
private Button myButton; 
private int Counter = 0; 
private Button myButton2; 
private TextView myTextView; 
Handler handler = new Handler(); 
private int add = 0; 

@Override 
protected void onCreate(final Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    if (savedInstanceState != null) { 
     Counter = savedInstanceState.getInt("Count"); 
     add = savedInstanceState.getInt("Add"); 
    } 
    setContentView(R.layout.activity_main); 
    myButton = (Button) findViewById(R.id.button); 
    myButton2 = (Button) findViewById(R.id.button2); 
    myTextView = (TextView) findViewById(R.id.textView); 


    myButton.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      Counter = ButtonCounter(Counter); 
     } 
    }); 
    myButton2.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      Intent intent = new Intent(getApplicationContext(), 
SecondActivity.class); 
      intent.putExtra("Count", Counter); 
      startActivity(intent); 
      finish(); 
     } 

    }); 

    handler.postDelayed(new Runnable() { 
     @Override 
     public void run() { 
      Counter = AutoCounter(Counter, add); 
      Display(Counter, myTextView); 
      handler.postDelayed(this, 100); 
     } 
    }, 10); 


} 

@Override 
public void onSaveInstanceState(Bundle savedInstanceState) { 
    savedInstanceState.putInt("Count", Counter); 
    savedInstanceState.putInt("Add", add); 

    super.onSaveInstanceState(savedInstanceState); 
} 


public int ButtonCounter(int Counter) { 
    Counter += 1; 
    return Counter; 
} 

public int AutoCounter(int Counter, int add) { 
    Counter += add; 
    return Counter; 
} 

public void Display(int Counter, TextView myTextView) { 
    String man = String.valueOf(Counter); 
    myTextView.setText("$" + man); 
} 


} 
+0

Was meintest du mit "wenn ich von der Aktivität gehe"? Wann ist das passiert? Wenn du die Zurück-Taste drückst oder wenn du die zweite Aktivität öffnest? –

+0

zweite Aktivität öffnen – Makk

+0

Sie rufen finish() auf, wenn Sie die SecondActivity öffnen, damit das gespeicherte Instanzstatuspaket nicht gespeichert wird. Auch wenn Sie die Aktivität schließen, indem Sie die Zurück-Schaltfläche drücken, ist das Verhalten identisch. Die Methode onSaveInstanceState wird hauptsächlich zum Speichern von Daten zur Orientierungsänderung verwendet. Wenn Sie den Zähler speichern möchten, sollten Sie SharedPreferences - https://developer.android.com/reference/android/content/SharedPreferences.html verwenden. –

Antwort

0

Mein Code läuft wie das ...

@Override 
protected void onSaveInstanceState(Bundle outState) 
{ 
    super.onSaveInstanceState(outState); 

    outState.putInt("Count", Counter); 
} 

@Override 
protected void onCreate(Bundle savedInstanceState) 
{ 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    if (savedInstanceState != null) 
    { 
     if (savedInstanceState.containsKey("Count")) 
     { 
      Counter = savedInstanceState.getInt("Count"); 
     } 
    } 
} 

Unterschied ist, dass ich nicht endgültig Bundle haben Sie auf erstellen und ich spare es nach super.onSave .. wich scheint seltsam ...

Verwandte Themen