我是一个用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. Server3. SQLlite2.Server3.SharedPreference
然后当你创建活动时,根据你加载的数据来设置btn的状态。
如果你只是为了练习,我相信sharepreference就可以了。
https:/developer.android.comtrainingdata-storageshared-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
因为它存储的是小数据。
要在你的代码示例中实现这一点
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();
}
而当应用启动时,你需要再次从共享偏好中检索该值,所以在你的activity onCreate()方法中。
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button button = findViewById(R.id.button);
SharedPreferences prefs = getSharedPreferences(PREFS_NAME, Context.MODE_PRIVATE);
isCaught = prefs.getBoolean(BUTTON_STATUS, false);
if (isCaught) {
button.setText("Release");
} else {
button.setText("Catch");
}
}