#android
#Android
Вопрос:
Я пытаюсь загрузить последнее открытое действие после закрытия приложения. Приведенный ниже код делает это. Теперь я пытаюсь выполнить сброс при нажатии кнопки, чтобы он очистил файл sharedpref и вернулся к mainactivity. Но метод clear() очищает только те значения, которые передаются из mainactivity, и не удаляет значение ключа lastactivity из файла настроек.Поэтому при нажатии кнопки сброса приложение зависает с белым экраном.Пытался удалить () только отдельное значение ключа lastactivity, но не сработало. Также пробовал apply() вместо использования commit() .Что я делаю неправильно.
РЕДАКТИРОВАТЬ: я удалил finish()
метод и передал intent
в mainactivity
класс. Теперь при нажатии кнопки сброса белый экран зависает и загружается mainactivity
. Но все же lastactivity
значение не удаляется из файла настроек. Теперь после принудительного закрытия и при открытии приложения оно загружается secondactivity
со defaultName
значениями as вместо загрузки mainactivity
.
SecondActivity
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main2);
TextView textView1 = (TextView) findViewById(R.id.textView1);
textView1.setText("Spinner 1");
TextView textView2 = (TextView) findViewById(R.id.textView2);
textView2.setText("Spinner 2");
SharedPreferences prefs = getSharedPreferences(Dispatcher.PREFS_NAME, MODE_PRIVATE);
spinnerValue = prefs.getString("spinnerValue", "defaultName");
spinnerValue2 = prefs.getString("spinnerValue2", "defaultName");
TextView textView5 = (TextView) findViewById(R.id.textView5);
textView5.setText(spinnerValue);
TextView textView6 = (TextView) findViewById(R.id.textView6);
textView6.setText(spinnerValue2);
Button resetButton = (Button) findViewById(R.id.end);
resetButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
finish();
clear();
}
});
}
@Override
protected void onPause() {
super.onPause();
SharedPreferences prefs = getSharedPreferences(Dispatcher.PREFS_NAME, MODE_PRIVATE);
Editor editor = prefs.edit();
editor.putString("lastActivity", getClass().getName());
editor.commit();
}
public void clear(){
SharedPreferences prefs = getSharedPreferences(Dispatcher.PREFS_NAME, MODE_PRIVATE);
Editor editor = prefs.edit();
//editor.remove("lastActivity");
//editor.commit();
editor.clear();
editor.commit();
}
}
Обновить:
boolean donotexecutecode = true;
@Override
public void onClick(View view) {
donotexecutecode = false;
clear();
finish();
}
@Override
protected void onPause() {
super.onPause();
SharedPreferences prefs = getSharedPreferences(Dispatcher.PREFS_NAME, MODE_PRIVATE);
if (donotexecutecode) {
Editor editor = prefs.edit();
editor.putString("lastActivity", getClass().getName());
editor.commit();
}
return;
}
public void clear(){
SharedPreferences prefs = getSharedPreferences(Dispatcher.PREFS_NAME, MODE_PRIVATE);
SharedPreferences.Editor editor = prefs.edit();
editor.clear();
editor.commit();
}
Комментарии:
1. В чем была проблема с удалением? Для меня это работает отлично.
2. по щелчку второе действие закрывается, появляется белый экран и зависает
3. Попробуйте изменить последовательность: finish(); clear(); на clear(); finish();
4. Уже пробовал эти варианты.
5. Тогда не могли бы вы прикрепить свой logcat?
Ответ №1:
По-видимому onPause()
, вызывается после clear();
. Поэтому вы всегда ставите этот ключ. Вы должны использовать логический флаг, чтобы не выполнять код в onPause, если вы хотите принудительно finish()
.
Ответ №2:
попробуйте SharedPreferences.Редактор вместо только редактора.
Комментарии:
1. Это не имеет значения, если оно импортируется SharedPreferences . Редактор