使用共享首选项android studio更改按钮的文本

ao218c7q  于 2021-06-30  发布在  Java
关注(0)|答案(2)|浏览(395)

我在做一个有按钮的简单应用程序。当pokemon被捕获时,我希望文本是“release”,当它没有被捕获时,文本是“catch!”。单击按钮时,我想将捕获的内容从true更改为false,反之亦然。
目前,我已经做到了这一点(它没有像我预期的那样工作):

public void toggleCatch(View view) {

        boolean caught;

        String name = nameTextView.getText().toString();

        SharedPreferences captured = getSharedPreferences("pokemon_name",Context.MODE_PRIVATE);

        if (captured.contains (name) ){
            catch_button.setText("Release");
            caught=true;
        }
        else{
            catch_button.setText("Catch!");
            caught=false;
        }

        if (caught) {
            getPreferences(Context.MODE_PRIVATE).edit().putString("pokemon_name", name).commit();
        } else {
            getPreferences(Context.MODE_PRIVATE).edit().remove(name).commit();
        }

    }

如果有人能帮我,我会非常感激的!
我迷路了,所以我不知道我是否在正确的道路上,我的代码可能是完全错误的。

vwhgwdsa

vwhgwdsa1#

SharedReferences是 key-value 对。因此,如果您试图访问该值,您应该检查该键是否存在,在您的示例中是 pokemon_name .

if (captured.contains("pokemon_name")){
    ...
}

再次删除时,应该给出键,而不是值。

...edit().remove("pokemon_name").commit();

阅读共享参考官方文档以更好地理解。

qacovj5a

qacovj5a2#

我想这就是你想要的:
在你的应用程序中,你有一个 EditText 允许用户输入pokemon名称。当用户单击“切换捕捉”按钮时,
如果pokemon名称被捕获(pokemon名称已保存在 SharePreferences ),然后从 SharePreferences 并将按钮的文本设置为“release”。
如果pokemon名称未被捕获(pokemon名称尚未保存在 SharePreferences ),然后将pokemon名称添加到 SharePreferences 并将按钮的文本设置为“catch!”。
解决方案

public void toggleCatch(View view) {
    String name = nameTextView.getText().toString().trim();
    SharedPreferences captured = getSharedPreferences("pokemon_name", Context.MODE_PRIVATE);
    boolean caught = captured.contains(name);
    if (caught) {
        captured.edit().remove(name).apply();
        catch_button.setText("Release");
    } else {
        captured.edit().putBoolean(name, true).apply();
        catch_button.setText("Catch!");
    }
}

相关问题