2015-07-06 3 views
1

Привет, может кто-нибудь объяснить мне, пожалуйста, что я делаю неправильно, потому что я не могу получить переменную из savedInstanceState, int "score" каждый раз, когда я меняю ориентацию на экране, он сбрасывает переменную.onSaveInstanceState не получает переменную после onCreate

int score; 
EditText et; 
String etString; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    et = (EditText) findViewById(R.id.editText); 
    if (savedInstanceState != null) { 
     score = savedInstanceState.getInt("score"); 
     et.setText(savedInstanceState.getString("etText")); 
     Log.d("TEST2", "score " + score); 
    } else { 
     score = 0; 
    } 

} 

@Override 
public void onSaveInstanceState(Bundle outState, PersistableBundle outPersistentState) { 
    super.onSaveInstanceState(outState, outPersistentState); 

    etString = et.getText().toString(); 
    outState.putString("etText", etString); 
    outState.putInt("score", score); 
    Log.d("TEST", "score " + score); 
} 

public void performAction(View v) { 
    switch (v.getId()) { 
    case R.id.button: 
     score += 1; 
     break; 
    case R.id.button2: 
     Toast.makeText(getApplicationContext(), "Score: " + score, Toast.LENGTH_LONG).show(); 
     break; 
    } 

} 

Помогите, если вы знаете решение.

+0

оценка = 0; после изменения ориентации экрана; даже я увеличил его, и он выше. – John

ответ

1

вы используете метод, который от Lollipop, изменение в версию, которая доступна с Android 1,0

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

увидеть различную сигнатуру методы?

+0

изменить его на: @Override protected void onCreate (Bundle outState) { super.onCreate (outState); setContentView (R.layout.activity_main); et = (EditText) findViewById (R.id.editText); if (outState! = Null) { оценка = outState.getInt ("оценка"); et.setText (outState.getString ("etText")); Log.d («TEST2», «оценка» + оценка); } else { оценка = 0; } } все еще ничего – John

+0

@ Джон, вы видели изменение, которое Буций сказал вам сделать? Судя по вашему комментарию здесь, вы изменили неправильный метод. Прочтите ответ еще раз и измените правильный код, а затем сообщите нам об этом. –

+0

@ Джон прочитал его снова. Вы должны изменить метод 'onSavedInstanceState'. – Budius

0

Вы должны реализовать onRestoreInstanceState вместо получения значения в onCreate. Система вызывает onRestoreInstanceState() только в том случае, если есть восстановленное состояние, поэтому вам не нужно проверять, является ли Bundle нулевым.

+0

Это не имеет ничего общего с проблемой. Это правда, что он вызвал только вызов с восстановлением, но одно и то же значение передается в onCreate, и нет ничего плохого в коде 'if (savedInstanceState! = Null)' – Budius

0
public class OrientationChangeActivity extends Activity { 

private EditText edtUser; 

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

    edtUser = (EditText) findViewById(R.id.edtUsername); 



    if (savedInstanceState != null /*&& savedInstanceState.getString("edt") != null*/) { 
     edtUser.setText(savedInstanceState.getString("edt")); 
     Log.e("Demo","==================================="+savedInstanceState.getString("edt")); 
    } 
} 

@Override 
protected void onSaveInstanceState(Bundle outState) { 
    outState.putString("edt", edtUser.getText().toString()); 
    super.onSaveInstanceState(outState); 
} 

}

Смежные вопросы