我有一个带有按钮的片段,该按钮为整个应用设置背景主题。我已经设置了一个界面,因此片段可以告诉主要活动设置背景或根据用户点击的按钮将其删除。
问题是,每次打开应用程序时,后台都不会被保存,需要再次切换。我已经看到这可以通过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);
}
}
答案 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()
你应该做两件事:
然后,在您onCreate()
的{{1}}中,您应检查该偏好并执行与MainActivity
实际上,您只能使用一个themechanged(int)
:
onClickListener()
答案 2 :(得分:0)
让我分享这个更复杂的例子,它可以涵盖这个和未来的需求:https://gist.github.com/walterpalladino/4f5509cbc8fc3ecf1497f05e37675111 PersistenceManager类是通用的,您的所有应用程序数据都应包含在Settings类中。 我希望它有所帮助。