繁体   English   中英

如何在AndroidStudio中保存按钮的state?

[英]How to save the state of a button in AndroidStudio?

我是 Java 编程新手,我正在学习 Android 应用程序课程。 我正在活动中构建一个按钮。 但是当我退出活动时,按钮变为原来的 state。 我知道我没有做任何事情来保存它的 state,但我该怎么做呢?

这是 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;
        }
    }

我该怎么做才能让它发挥作用?

您应该将指示 state 的数据存储在某个地方:1. SQLlite 2. 服务器 3. SharedPreference

然后当您创建活动时,根据您加载的数据设置 btn 的 state。

如果只是为了练习,我相信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)

您需要将按钮 state 保存在持久存储中; 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();

}

并且您需要在启动应用程序时再次从共享首选项中检索该值,因此在您的活动 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");
    }

}   

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM