Как сохранить измененный TextView с SharedPreferences? - PullRequest
0 голосов
/ 14 ноября 2011

ОК, вот моя проблема. У меня есть счетчик, и каждый параметр в счетчике должен редактировать текстовое представление в моем макете (параметр в счетчике вы можете увидеть в команде положения), поэтому я сделал это с SharedPreferences, это не проблема, когда я выбираю какой-то параметр в счетчике, поэтому textview изменяется, но когда я убиваю свое приложение и затем снова открываю, textview по умолчанию (так же, как определено в моем макете). Так в чем же проблема?

Первое занятие:

if(position == 4){
    SharedPreferences myPrefsUv = CPUActivity.this.getSharedPreferences("myPrefsUv", MODE_PRIVATE);
    SharedPreferences.Editor prefsEditorUv = myPrefsUv.edit();
    prefsEditorUv.putString(maxUv, "1");
    prefsEditorUv.commit();
}

if(position == 5){
    SharedPreferences myPrefsUv = CPUActivity.this.getSharedPreferences("myPrefsUv", MODE_PRIVATE);
    SharedPreferences.Editor prefsEditorUv = myPrefsUv.edit();
    prefsEditorUv.putString(maxUv, "2");
    prefsEditorUv.commit();
}

if(position == 6){
    SharedPreferences myPrefsUv = CPUActivity.this.getSharedPreferences("myPrefsUv", MODE_PRIVATE);
    SharedPreferences.Editor prefsEditorUv = myPrefsUv.edit();
    prefsEditorUv.putString(maxUv, "3");
    prefsEditorUv.commit();
}

if(position == 7){
    SharedPreferences myPrefsUv = CPUActivity.this.getSharedPreferences("myPrefsUv", MODE_PRIVATE);
    SharedPreferences.Editor prefsEditorUv = myPrefsUv.edit();
    prefsEditorUv.putString(maxUv, "4");
    prefsEditorUv.commit();
}

Второе занятие:

@Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.my_layout);

        SharedPreferences myPrefsUv = UVActivity.this.getSharedPreferences("myPrefsUv", MODE_PRIVATE);
        String prefNameUv = myPrefsUv.getString(maxUv, "");
        if(prefNameUv == "1"){
            final TextView textUv = (TextView)findViewById(R.id.text_max);
            textUv.setText("100");
        }
        if(prefNameUv == "2"){
            final TextView textUv = (TextView)findViewById(R.id.text_max);
            textUv.setText("110");
        }
        if(prefNameUv == "3"){
            final TextView textUv = (TextView)findViewById(R.id.text_max);
            textUv.setText("120");
        }
        if(prefNameUv == "4"){
            final TextView textUv = (TextView)findViewById(R.id.text_max);
            textUv.setText("130");
        }
    }

Спасибо.

Ответы [ 2 ]

2 голосов
/ 14 ноября 2011

Вы добавляете разные значения одним и тем же ключом?Таким образом, я думаю, что он всегда вернет первый матч.Я не вижу в вашем коде "maxUv" назначенных разных значений, в зависимости от разных случаев.

1) Я предлагаю вам перейти к конструкции if / else.Таким образом, когда вы находитесь в правильном случае, остальные условия не оцениваются.

2) вызывают следующие строки вне конструкции if / else.Вам не нужно получать редактор SharedPreferences в каждом случае.

SharedPreferences myPrefsUv = CPUActivity.this.getSharedPreferences("myPrefsUv", MODE_PRIVATE);
SharedPreferences.Editor prefsEditorUv = myPrefsUv.edit();

То же самое для получения TextView textUv во втором действии.Просто получите ссылку один раз и используйте одну и ту же ссылку во всех случаях.

3) Во втором упражнении вы также сравниваете строки с оператором ==, но строки должны сравниваться с equals ().

0 голосов
/ 14 ноября 2011

Другой парень бил меня в это. старые вещи равны.

Вы сравниваете строку, используя "==". Вы должны сравнить, используя .equals:

if(prefNameUv.equals("1"))

Это то, что вам нужно.

Кроме того, старайтесь не объявлять файл настроек. В вашем случае это вам не нужно, поэтому нет необходимости делать его более сложным. Используйте следующее ...

Первое занятие:

SharedPreferences myPrefsUv = PreferenceManager.getDefaultSharedPreferences(CPUActivity.this);

Второе занятие:

SharedPreferences myPrefsUv = PreferenceManager.getDefaultSharedPreferences(UVActivity.this);
...