我是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;
}
}
我该怎么做才能使其正常工作?
您应该将指示状态的数据存储在某个位置: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)
您需要将按钮状态保存在永久性存储中; 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();
}