Захотелось мне чтобы текст который я сохраняю кнопкой "Save" сохранялся в одну ячейку и вызывался обратно только по нажатию кнопки "Load", а также чтобы текст который был введен до onDestroy выводился после onCreate.
Константы, едиторы и преференсы. Проблема в том, что Текст который сохраняется при onDestroy сохраняется так же и в "Save". Таким образом текст который я сохранял вручную перезаписывается. Помогите решить задачу.
Код: Выделить всё
package ru.startandroid.sharedpreferences;
import android.content.SharedPreferences;
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
import java.util.Set;
public class MainActivity extends ActionBarActivity implements View.OnClickListener{
EditText editText;
Button btnSave, btnLoad, btnClear;
SharedPreferences pref, prefDestroy;
final String SAVED_TEXT = "";
final String SAVED_TEXT_ON_DESTROY = "";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.layout_main);
editText = (EditText) findViewById(R.id.editText);
btnSave = (Button) findViewById(R.id.btnSave);
btnLoad = (Button) findViewById(R.id.btnLoad);
btnClear = (Button) findViewById(R.id.btnClear);
btnSave.setOnClickListener(this);
btnLoad.setOnClickListener(this);
btnClear.setOnClickListener(this);
prefDestroy = getPreferences(MODE_PRIVATE);
String savedText = prefDestroy.getString(SAVED_TEXT_ON_DESTROY,"");
if (savedText.length() > 0) {
editText.setText(savedText);
Toast.makeText(this, "Text loaded", Toast.LENGTH_SHORT).show();
}
}
@Override
public void onClick(View view) {
switch (view.getId()){
case R.id.btnSave:
saveText();
break;
case R.id.btnLoad:
loadText();
break;
case R.id.btnClear:
editText.getText().clear();
break;
default:
break;
}
}
private void saveText() {
pref = getPreferences(MODE_PRIVATE);
SharedPreferences.Editor ed = pref.edit();
ed.putString(SAVED_TEXT, editText.getText().toString());
ed.commit();
Toast.makeText(this, "Text Saved", Toast.LENGTH_SHORT).show();
}
private void saveTextOnDestroy() {
prefDestroy = getPreferences(MODE_PRIVATE);
SharedPreferences.Editor edd = prefDestroy.edit();
edd.putString(SAVED_TEXT_ON_DESTROY, editText.getText().toString());
edd.commit();
Toast.makeText(this, "Text Saved",Toast.LENGTH_SHORT).show();
}
private void loadText(){
pref = getPreferences(MODE_PRIVATE);
String savedText = pref.getString(SAVED_TEXT,"");
editText.setText(savedText);
Toast.makeText(this,"Text loaded",Toast.LENGTH_SHORT).show();
}
@Override
protected void onDestroy() {
super.onDestroy();
saveTextOnDestroy();
}
}Код: Выделить всё
final String SAVED_TEXT = "1";
final String SAVED_TEXT_ON_DESTROY = "2";Однако проблема не исчезла!
Результаты теста приложения:
editText - "Привет"
Кнопка "Save" > Toast "Text Saved"
Кнопка "Clear" > editText = ""
Кнопка "Load" > edittext = "Привет"
Клавиша "Back" > Toast "Text Saved" // Текстовые константы приобретают одинаковые значения "Привет", приложение закрывается.
Запускаем приложение > editText = "Привет"
Дальше интересно)))))
editText = "Пока"
Клавиша "Back" > Toast "Text Saved"
Запускаем приложение > editText = "Пока"
Кнопка "Load" > edittext = "Пока" !!!
Произошла потеря данных. Неужели еще прийдется дописывать код чтобы константы в процессе работы приложения опять не стали одинаковыми????