如何保存改变TextView与SharedPreferences



我的问题是。我有一个微调器和微调器中的每个选项都应该在我的布局中编辑textview(微调器中的选项你可以在位置命令中看到),所以我用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");
        }
    }

谢谢。

您正在使用相同的键添加不同的值?这样我认为它总是会返回第一场比赛。我没有看到在你的代码"maxUv"被分配不同的值,根据不同的情况。

1)我建议您移动到if/else结构。这样,当你在正确的情况下,剩下的条件不会被计算。

2)在if/else构造之外调用以下行。你不需要在任何情况下都使用SharedPreferences Editor。

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

在第二个活动中获取TextView textUv也是如此。只获取一次引用,在所有情况下使用相同的引用。

3)在第二个活动中,您也比较字符串与==操作符,但字符串应该与equals()比较。

另一个人抢先了我一步。旧的等号。

您正在使用"=="比较字符串。您应该使用。equals:

进行比较。
if(prefNameUv.equals("1"))

这是你所需要的东西。

此外,尽量不要声明首选项文件。在您的情况下,您不需要它,因此没有必要使它更复杂。

第一个活动:

SharedPreferences myPrefsUv = PreferenceManager.getDefaultSharedPreferences(CPUActivity.this);
第二活动:

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

最新更新