如何在SharedPreferences中保存我的应用背景?

时间:2017-10-11 13:19:58

标签: java android sharedpreferences

我有一个带有按钮的片段,该按钮为整个应用设置背景主题。我已经设置了一个界面,因此片段可以告诉主要活动设置背景或根据用户点击的按钮将其删除。

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

在我的片段中这会显示两个按钮,将值1或2发送到主活动以切换背景

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);
        }
    });

在我的主要活动中这会从侦听器获取值,并根据值是什么来切换背景

    @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);
    }
}

3 个答案:

答案 0 :(得分:1)

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

全局变量

SharedPreferences pref;
SharedPreferences.Editor editor;

OnCreateView()

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

现在,将preferences存储在 Button 上,然后点击

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);
    }
});

然后,在 MainActivity OnCreate()中,您可以查看

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);
}

完成,可能会有所帮助

答案 1 :(得分:0)

onClick()你应该做两件事:

  • 将值发送给侦听器(您已经这样做了)
  • 将此值保存到首选项(已发布如何执行here

然后,在您onCreate()的{​​{1}}中,您应检查该偏好并执行与MainActivity

相同的操作

实际上,您只能使用一个themechanged(int)

onClickListener()

答案 2 :(得分:0)

让我分享这个更复杂的例子,它可以涵盖这个和未来的需求:https://gist.github.com/walterpalladino/4f5509cbc8fc3ecf1497f05e37675111 PersistenceManager类是通用的,您的所有应用程序数据都应包含在Settings类中。 我希望它有所帮助。