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

CHANGING the text of a button with SHARED PREFERENCES android studio

我正在制作一个带有按钮的简单应用。当一只宠物小精灵被捕获时,我希望文本为“释放”,而当它没有被捕获时,则为“捕获!”。单击按钮时,我想将 caught 从 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();
        }

    }

如果有人能帮助我,我将不胜感激!

我迷路了所以我不知道我是否在正确的道路上,我的代码可能完全错误。

SharedPreferences 是 key-value 对的映射。因此,如果您尝试访问该值,您应该检查密钥是否存在,在您的情况下是 pokemon_name.

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

再次删除时,您应该提供密钥,而不是值。

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

阅读 SharedPreferences 官方文档以更好地理解。

我想这就是你想要的:

在您的应用中,您有一个 EditText 允许用户输入宠物小精灵名称。当用户点击切换捕捉按钮时,

  • 如果小精灵名字被捕获(小精灵名字已经保存在SharePreferences中),那么从SharePreferences中移除小精灵名字并设置文本按钮“释放”。

  • 如果小精灵名字没有被捕获(小精灵名字还没有保存在SharePreferences中),那么将小精灵名字添加到SharePreferences中并设置按钮的文本为“捕捉!”。

解决方案

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!");
    }
}