在Android Studio的不同活动中保持变量值

时间:2017-05-12 14:28:22

标签: android variables

我在我的应用中添加了标签活动。在每个选项卡中,我都有一个(开关)按钮,通过单击可以打开和关闭。当我移动到另一个标签并回到同一个标签时,它会下降。我希望保持其价值,以便在切换到其他活动时不会改变。

按钮的布局(XML)代码:

   <Button
    android:id="@+id/b_btnlight"
    android:layout_width="65dp"
    android:layout_height="30dp"
    android:text="ON"
    android:background="@color/red"
    android:textColor="@color/black"
    android:layout_marginLeft="220dp"
    android:layout_marginTop="500dp"/>

相关标签活动:

bbtnlight = (Button) rootView.findViewById(R.id.b_btnlight);

bbtnlight.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                if(bbtnlight.getText()=="ON")
                {bbtnlight.setText("OFF");
                    bbtnlight.setBackgroundColor(getResources().getColor(R.color.green));}
                else
                {bbtnlight.setText("ON");
                    bbtnlight.setBackgroundColor(getResources().getColor(R.color.red));}
            }
        });

当按钮为OFF时,其颜色为红色,文本等于ON,反之亦然。对于其他标签活动,我有同样的事情。如果你能在这种情况下帮助我,我感激不尽。感谢。

4 个答案:

答案 0 :(得分:2)

在Android中,如果活动不在屏幕上,您将无法确定活动何时会内存不足。如果您希望应用记住值,则必须找到永久或半永久存储它们的地方,即使用户切换到另一个活动,另一个应用,关闭屏幕,甚至关闭设备。您不能认为仅仅因为屏幕上的活动不再是用户完成的。例如,如果用户在使用您的应用时接到电话,他们可能希望返回他们离开的地方。

有些地方可以在Android中存储持久性数据。以下是前2名:

  1. 共享偏好设置 - https://developer.android.com/reference/android/content/SharedPreferences.html
  2. SqlLite - https://developer.android.com/training/basics/data-storage/databases.html

答案 1 :(得分:1)

一个选项是创建一个带有静态变量的类,以便在应用程序生存期内保存该值

public class GlobalVars {
    public static boolean isLightOn;
}

通过这种方式,您可以从应用程序的任何位置获取和设置GlobalVars.isLightOn。当您使用开关时将其设置为true,当您返回时,如果它是真或假,请检查此变量。 当您关闭应用程序时,变量将重置为false

另一种选择是使用SharedPreferences存储您的数据,这样当您关闭应用时,如果再次打开数据,数据就会存在

答案 2 :(得分:1)

使用SharedPreference

SharedPreferences pref = getApplicationContext().getSharedPreferences("MyPref", 0); // 0 - for private mode
Editor editor = pref.edit();

存储数据

editor.putBoolean("key_name", true); // Storing boolean - true/false
editor.putString("key_name", "string value"); // Storing string
editor.putInt("key_name", "int value"); // Storing integer
editor.putFloat("key_name", "float value"); // Storing float
editor.putLong("key_name", "long value"); // Storing long

editor.commit(); // commit changes

检索数据

pref.getString("key_name", null); // getting String
pref.getInt("key_name", null); // getting Integer
pref.getFloat("key_name", null); // getting Float
pref.getLong("key_name", null); // getting Long
pref.getBoolean("key_name", null); // getting boolean

答案 3 :(得分:1)

您只需在 SharedPreferences

中进行设置即可
SharedPreferences pref = getSharedPreferences(MODE_PRIVATE); 
Editor editor = pref.edit();

onCreate(){
     checkButton();
     bbtnlight.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                checkButton();
            }
        });   
}

private void checkButton() {
    if (pref.getBoolean("is_button_checked", false)) {
        bbtnlight.setText("ON");
        bbtnlight.setBackgroundColor(getResources().getColor(R.color.red));
        editor.putBoolean("is_button_checked", true);
    } else {
        bbtnlight.setText("OFF");
        bbtnlight.setBackgroundColor(getResources().getColor(R.color.green));
        editor.putBoolean("is_button_checked", false);
    }
}