@ krupesh Anadkat Я разочарован новичком, но @ CommonsWare - опытный разработчик, который был в игре в течение нескольких дней.
Следуйте его советами убедитесь, что вы изучили основные принципы, которые он обрисовал, а не проговорились или просто торопились что-то построить ради этого.
Однако сегодня ваш счастливый день, поэтому я побалую вас некоторыми фрагментами кода (мы тысячелетниепрограммистам это просто - да, я сказал это !!!) читайте о юнглинге и учитесь.
Проблема, с которой вы здесь сталкиваетесь, заключается в изменении конфигурации устройства .
Вваш случай изменить ориентацию экрана .
Каждый раз, когда пользователь поворачивает этот экран, ОС Android воссоздает новую активность . ОС Android означает, что не вредно, просто пытаясь быть эффективным, проверяя, есть ли лучшие ресурсы для этой новой ориентации, и если да, то она может использовать их вместо этого.
Это источниквашей боли.Теперь давайте попробуем помочь вам.
Вы можете использовать методы класса Activity , чтобы вырваться из этого.Прежде чем всемогущий Android OS убьет вашу активность, в жизненном цикле вашей деятельности будет вызван метод onSaveInstanceState () .В вашем классе вы переопределяете onSaveInstanceState () и сохраняете нужные данные в Bundle , который onSaveInstanceState () принимает в качестве аргумента.
Затем в onCreate () вашей Деятельности вы проверяете, не является ли saveInstanceState ненулевым, если вы не нулевым, вы извлекаете свои данные.
Будьте осторожны;Лучше всего сохранять примитивные типы данных в Bundle или объекты serializable , чтобы избежать извлечения данных, которые устарели, то есть устарели или больше не действительны.
См. Фрагмент кода для моей активности SaveDataAcrossScreenOrientation ниже
package com.demo.android.savedataacrossscreenrotationdemo;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
public class SaveDataAcrossScreenOrientation extends AppCompatActivity {
// Key to be used for the key: value pair to be saved to the bundle
private static final String KEY_GREETING_TEXT = "greeting_text";
// The text currently displayed to the screen
private String mCurrentDisplayedText;
private TextView mGreetingTextView;
private Button mSpanishButton;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// Get references to the button and textview
mGreetingTextView = (TextView) findViewById(R.id.greeting_text_view);
mSpanishButton = (Button) findViewById(R.id.change_greeting_button);
// If mCurrentDisplayedText is inside the bundle retrieve and display it on screen
if(savedInstanceState != null) {
mCurrentDisplayedText = savedInstanceState.getString(KEY_GREETING_TEXT, "");
if (mCurrentDisplayedText != "") {
mGreetingTextView.setText(mCurrentDisplayedText);
}
}
// Set a listener on the spanish button
mSpanishButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// Change the english text to spanish when the button is clicked
mGreetingTextView.setText(R.string.spanish_greeting);
// Get the text currently shown in the text view
mCurrentDisplayedText = (String) mGreetingTextView.getText(); // Calling getText() returns a CharSequence cast it to a string
}
});
}
// Override onSaveInstanceState(Bundle savedInstanceState) and save mCurrentDisplayedText to the bundle
@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
super.onSaveInstanceState(savedInstanceState);
savedInstanceState.putString(KEY_GREETING_TEXT, mCurrentDisplayedText);
}
}
Смотрите демонстрацию видео здесь
Веселитесь!