如何在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. 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)


0
投票

你需要将按钮状态保存在持久性存储中,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");
    }

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