如何在AndroidStudio中保存按钮的状态?

问题描述 投票:0回答:2

我是Java编程的新手,并且正在学习Android应用程序。我在活动中建立一个按钮。但是当我退出活动时,按钮将更改为原始状态。我知道我没有做任何事情来保存其状态,但是我该怎么做?

这里是xml文件(仅按钮部分):

<Button
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/Catch"
    android:id="@+id/button"
    android:onClick="toggleCatch" />

这里是toggleCatch:

private boolean isCaught = false;    
@SuppressLint("SetTextI18n")
    public void toggleCatch(View view) {
        Button button = findViewById(R.id.button);

        if (isCaught) {
            button.setText("Catch");
            isCaught = false;
        } else {
            button.setText("Release");
            isCaught = true;
        }
    }

我该怎么做才能使其正常工作?

java android button
2个回答
0
投票

您应该将指示状态的数据存储在某个位置:1. SQLlite2.服务器3. SharedPreference

然后在创建活动时,将根据加载的数据来设置btn的状态。

如果您只是为了练习而这样做,我相信sharepreference就可以了。

https://developer.android.com/training/data-storage/shared-preferences

将任何数据本地存储在sharedPreference中:

SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPref.edit();
editor.putBoolean("SOME_NAME_FOR_YOUR_VARIABLE_EX_BTN_STATE", trueOrFalse);
editor.commit(); 

获取保存的数据:

SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE);
boolean stateBtn = sharedPref.getBoolean("SOME_NAME_FOR_YOUR_VARIABLE_EX_BTN_STATE", defaultValueForExTrue);

sharedPref.getBoolean也可以用于sharedPref.getString,sharedPref.getInt等。

希望有帮助。我的建议是阅读上述主题。(SQLlite,SharedPreference)


0
投票

您需要将按钮状态保存在永久性存储中; Android支持多种持久性存储类型,例如SharedPreference,DataBase,内部/外部存储文件...最适合您的问题的是SharedPreference,因为它存储着小数据。

要在您的代码示例中实现

SharedPreference

并且您需要在启动应用程序时再次从共享首选项中检索值,因此在您的活动onCreate()方法中:

public static final String PREFS_NAME = "PREFS_NAME";
public static final String BUTTON_STATUS = "status";

private boolean isCaught = false;    
@SuppressLint("SetTextI18n")
public void toggleCatch(View view) {
    Button button = findViewById(R.id.button);

    if (isCaught) {
        button.setText("Catch");
        isCaught = false;
    } else {
        button.setText("Release");
        isCaught = true;
    }

    SharedPreferences prefs = getSharedPreferences(PREFS_NAME, Context.MODE_PRIVATE);
    SharedPreferences.Editor editor = prefs.edit();
    editor.putBoolean(BUTTON_STATUS, isCaught);
    editor.apply();

}
© www.soinside.com 2019 - 2024. All rights reserved.