Отредактируйте sharedPreferences с двумя разными действиями, чтобы повлиять на изменение третьего действия.

Я знаю все о sharedPreferences, но меня смущает это. Я знаю, чтобы поместить вещи в общие настройки, вы делаете это:

Допустим, это действие А:

SharedPreferences preferences=getSharedPreferences("numbers",MODE_PRIVATE);
SharedPreferences.Editor edit=preferences.edit();
String a=ed.getText().toString();
String b=ed1.getText().toString();
editor.putString("num1",a);
editor.putString("num2",b);
editor.apply();

и чтобы получить его в действии B,

SharedPreferences preferences=getSharedPreferences("numbers",MODE_PRIVATE);
String numberOne=preferences.getString("num1","");
String numberTwo=preferences.getString("num2","");

а затем мы могли бы установить textView в действии B как:

TextView both;
both.setText(numberOne + " " + numberTwo);

но что, если я хочу отредактировать то, что находится в общих настройках в действии C?? Я искал в Интернете, как это сделать, и эта статья здесь

http://codetheory.in/android-application-data-storage-sharedpreferences/

он сказал, что вам нужно было только вызвать его снова, но с другим строковым значением, например так

Деятельность С:

SharedPreferences preferences=getSharedPreferences("numbers",MODE_PRIVATE);
SharedPreferences.Editor edit=preferences.edit();
String c=ed3.getText().toString();
String d=ed4.getText().toString();
editor.putString("num1",c);
editor.putString("num2",d);
editor.apply();

и когда это будет сделано, он должен обновить добавление в действии B как 29, а не 12 больше. Но вот в чем моя проблема, он не редактирует файл sharedPreferences. Есть ли другой способ сделать это? Почему он не обновляет дополнение в действии B?


person Aria    schedule 27.01.2016    source источник
comment
Не могу понять, почему это не работает. Вы делаете это из другой темы?   -  person Droid Chris    schedule 27.01.2016
comment
нет, просто три разных действия   -  person Aria    schedule 27.01.2016
comment
Затем покажите код активности C   -  person Droid Chris    schedule 27.01.2016
comment
Нам нужно больше входных данных здесь. Данный код должен работать отлично.   -  person dipdipdip    schedule 27.01.2016
comment
@droidchris я немного отредактировал его, он работал со строками, а не с целыми числами, а текстовые представления в C были обновлены с помощью общих настроек.   -  person Aria    schedule 27.01.2016
comment
Итак, я попытался сделать это снова, но проверьте это, когда он перемещается из действия C обратно в B, это не имеет эффекта, если я не изменю положение телефона в руке с портретного на альбомное и обратно! как?? @droidchris   -  person Aria    schedule 27.01.2016
comment
Показ всего вашего кода мог бы привести к более быстрому заключению. Вы должны загружать свои общие настройки каждый раз, когда вносите в них изменения, а не при создании.   -  person Droid Chris    schedule 27.01.2016


Ответы (2)


Вы, вероятно, загружаете эти значения в onCreate()

Этот метод вызывается только один раз за время существования Activity. Когда вы поворачиваете телефон, Activity уничтожается и перестраивается, снова вызывая onCreate().

Возможное решение — загрузить значения в onResume(), чтобы они были у вас, как только вы вернетесь из другого действия.

person Shmuel    schedule 27.01.2016
comment
так что мне просто скопировать и вставить все это в onResume()? - person Aria; 27.01.2016
comment
ps, вы можете обновить свой вопрос со всей деятельностью, если вам нужна дополнительная помощь. - person Shmuel; 27.01.2016

Возможно, значения правильно сохраняются в Shared Pref, но значения в текстовых полях не обновляются. Вы могли бы проверить это.

person David Rauca    schedule 27.01.2016
comment
Итак, я попытался сделать это снова, но проверьте это, когда он перемещается из действия C обратно в B, это не имеет эффекта, если я не изменю положение телефона в руке с портретного на альбомное и обратно! как?? - person Aria; 27.01.2016
comment
Да. Кажется, проблема в том, что вы не обновляете значения в текстовых полях. Активность воссоздается, когда телефон переключается с книжной на альбомную, поэтому в этом случае она работает. (вы можете обновить текстовые поля в onResume. Это должно работать) - person David Rauca; 27.01.2016
comment
поэтому в onResume действия B я снова получаю строки из sharedPreferences и еще раз назначаю текстовые поля каждому из них? - person Aria; 27.01.2016