java - 如何在 SharedPreferences 中保存我的应用程序背景?

标签 java android sharedpreferences

我有一个带有按钮的 fragment ,可以为整个应用程序设置背景主题。我已经设置了一个界面,以便 fragment 可以告诉主要 Activity 设置背景或删除背景,具体取决于用户单击的按钮。

问题是每次打开应用程序时,背景都不会保存,需要再次切换。我已经看到这可以通过 SharedPreferences 解决,但在这里实现它让我感到困惑

在我的 fragment 中这显示了两个按钮,将值 1 或 2 发送到主 Activity 以切换背景

enable = (Button) rootView.findViewById(R.id.enable);
enable.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            listener.themechanged(2);
            enable.setVisibility(View.GONE);
            disable.setVisibility(View.VISIBLE);

        }
    });
    disable = (Button) rootView.findViewById(R.id.disable);
    disable.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            listener.themechanged(1);
            disable.setVisibility(View.GONE);
            enable.setVisibility(View.VISIBLE);
        }
    });

在我的主要 Activity 中这从监听器获取值并根据该值切换背景

    @Override

    public void themechanged(int value) {

    if(value==2) {
        if (isDarkTheme) {
            appbackground.setVisibility(View.GONE);
            shade.setVisibility(View.GONE);
        } else {
            appbackground.setVisibility(View.VISIBLE);
            shade.setVisibility(View.VISIBLE);
        }
    }else if(value!=2||value==1){
            appbackground.setVisibility(View.GONE);
            shade.setVisibility(View.GONE);
    }
}

最佳答案

使用SharedPrefence来存储主题的值,例如-:

全局变量

SharedPreferences pref;
SharedPreferences.Editor editor;

OnCreateView()

pref = getActivity().getSharedPreferences("Theme", Context.MODE_PRIVATE);
editor = pref.edit();

现在,在按钮点击上存储首选项

enable = (Button) rootView.findViewById(R.id.enable);
enable.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {

      editor.putInt("yourTheme", 2);
      editor.commit();
        listener.themechanged(2);
        enable.setVisibility(View.GONE);
        disable.setVisibility(View.VISIBLE);

    }
});
disable = (Button) rootView.findViewById(R.id.disable);
disable.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        editor.putInt("yourTheme", 1);
        editor.commit();
        listener.themechanged(1);
        disable.setVisibility(View.GONE);
        enable.setVisibility(View.VISIBLE);
    }
});

然后,在MainActivityOnCreate()中,您可以检查如下

SharedPreferences pref = getSharedPreferences("Theme", MODE_PRIVATE);
value= pref.getInt("yourTheme", 1);//1 is default value

if(value==2) {
    if (isDarkTheme) {
        appbackground.setVisibility(View.GONE);
        shade.setVisibility(View.GONE);
    } else {
        appbackground.setVisibility(View.VISIBLE);
        shade.setVisibility(View.VISIBLE);
    }
}else if(value==1){
        appbackground.setVisibility(View.GONE);
        shade.setVisibility(View.GONE);
}

完成,可能会有帮助

关于java - 如何在 SharedPreferences 中保存我的应用程序背景?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46689300/

相关文章:

java - Spark 框架 : Match with or without trailing slash

java - 代码解释。方法中的方法和一些其他语法

深度优先算法顺序中的java递归。越来越深的getAccumulated值

xmlpullparser 的 Android dalvik 转换

java - 三星手机(安卓系统)显示最后一个项目时,如何使listview不能滚动

android - 以编程方式检查共享首选项 key 是否已加密

java:从jEditorPane获取带有换行符的纯文本

java.lang.NoClassDefFoundError : android. 媒体.ThumbnailUtils

flutter - 如何使用共享首选项通过 block 方法保存用户选择的语言

java - 反序列化自定义对象的序列化 ArrayList,添加对象,然后重新序列化