有没有办法在明暗模式之间切换后保留变量状态的值以显示在文本视图中
Posted
技术标签:
【中文标题】有没有办法在明暗模式之间切换后保留变量状态的值以显示在文本视图中【英文标题】:is there way to preserve the value of variable state to show in textview after switching between light and dark modes 【发布时间】:2021-12-16 12:11:18 【问题描述】:我是新手,我正在尝试构建计算按钮被点击次数的应用程序 我有一个名为 count 的变量,它记录按钮被点击的次数,并在按钮下方的文本视图中显示,我有暗模式切换按钮来在暗模式和亮模式之间切换。 最初在浅色模式下,我点击了几次按钮,然后它显示了点击按钮的次数,然后我切换到深色模式,计数已设置为零 在明暗模式之间切换后,有什么方法可以保留变量状态的值以显示在 textview 中? 当我点击暗模式或亮模式时,计数值重置为 0,但我想要之前处于亮模式的值...
这是我的代码
public class MainActivity extends AppCompatActivity
Button button;
TextView textView1,textView2;
Switch aSwitch;
int count=0;
String light="light",dark="dark";
RelativeLayout relativeLayout;
@Override
protected void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
button = findViewById(R.id.button);
textView1 = findViewById(R.id.remindmetext);
textView2 = findViewById(R.id.countext);
aSwitch = findViewById(R.id.switch1);
relativeLayout = findViewById(R.id.relative);
SharedPreferences sharedPreferences
= getSharedPreferences(
"sharedPrefs", MODE_PRIVATE);
final SharedPreferences.Editor editor
= sharedPreferences.edit();
final boolean isDarkModeOn
= sharedPreferences
.getBoolean(
"isDarkModeOn", false);
if (isDarkModeOn)
AppCompatDelegate
.setDefaultNightMode(
AppCompatDelegate
.MODE_NIGHT_YES);
aSwitch.setText(
"Light");
else
AppCompatDelegate
.setDefaultNightMode(
AppCompatDelegate
.MODE_NIGHT_NO);
aSwitch
.setText(
"Dark");
button.setOnClickListener(new View.OnClickListener()
@Override
public void onClick(View v)
count=count+1;
textView2.setText(Integer.toString(count));
);
aSwitch.setOnClickListener(
new View.OnClickListener()
@Override
public void onClick(View view)
// When user taps the enable/disable
// dark mode button
if (isDarkModeOn)
// if dark mode is on it
// will turn it off
AppCompatDelegate
.setDefaultNightMode(
AppCompatDelegate
.MODE_NIGHT_NO);
// it will set isDarkModeOn
// boolean to false
editor.putBoolean(
"isDarkModeOn", false);
editor.apply();
// change text of Button
aSwitch.setText(
"Dark");
else
// if dark mode is off
// it will turn it on
AppCompatDelegate
.setDefaultNightMode(
AppCompatDelegate
.MODE_NIGHT_YES);
// it will set isDarkModeOn
// boolean to true
editor.putBoolean(
"isDarkModeOn", true);
editor.apply();
// change text of Button
aSwitch.setText(
"Light");
);
这是gif
【问题讨论】:
【参考方案1】:当您更改主题时,所有活动和片段都会重新创建。见Configuration Changes。您可以:
将计数值保存在 ViewModel 中 将您的计数值保存在 savedInstanceState 包中 将您的计数值保存在 SharedPreferences 中并相应地从它们加载。对于这个简单的情况,使用 savedInstanceState 不是一件容易的事,因为它可以确保第一次创建时为空值,而在配置更改时为非空值。使用 SharedPreferences 也很容易。
【讨论】:
以上是关于有没有办法在明暗模式之间切换后保留变量状态的值以显示在文本视图中的主要内容,如果未能解决你的问题,请参考以下文章
使用JavaScript / jQuery为网站创夜间/高亮模式