Android 尝试使用SharedReferences更改颜色,但这不是正确的方式

Android 尝试使用SharedReferences更改颜色,但这不是正确的方式,android,sharedpreferences,Android,Sharedpreferences,我试图从菜单中更改某些文本和main活动的颜色。 我有两个菜单,白色和黑色,如果我点击白色将返回背景白色,按钮黑色,文本黑色的颜色。当我点击黑色将返回背景灰色,按钮白色,文本,白色的颜色。 我试图用SharedReferences保存此文件,但它不总是起作用,它采用灰色。 如果我在没有SharedReferences的情况下执行此操作,并单击PopUpMenu它会更改颜色,但使用SharedReferences它不会起作用,因为我写的是假的 这是我在MainActivity.class中的代码

我试图从菜单中更改某些文本和
main活动的颜色。
我有两个菜单,白色和黑色,如果我点击白色将返回背景白色,按钮黑色,文本黑色的颜色。当我点击黑色将返回背景灰色,按钮白色,文本,白色的颜色。
我试图用
SharedReferences
保存此文件,但它不总是起作用,它采用灰色。 如果我在没有
SharedReferences
的情况下执行此操作,并单击
PopUpMenu
它会更改颜色,但使用
SharedReferences
它不会起作用,因为我写的是假的

这是我在
MainActivity.class
中的代码

private boolean switchOnOff;
public static final String Change_Color = "Change_Color";


switchOnOff = getChangeColor();
    if (switchOnOff) {
        setColorGreyImageButton();
    } else {
        setColorWhiteImageButton();

    }

public void setColorGreyImageButton() {
    settings.setColorFilter(Color.parseColor("#757575"));
    voiceSearch.setColorFilter(Color.parseColor("#757575"));
    share.setColorFilter(Color.parseColor("#757575"));
    search.setColorFilter(Color.parseColor("#757575"));
    mainView.setBackgroundColor(Color.parseColor("#FFFFFF"));

}


public void setColorWhiteImageButton() {
    settings.setColorFilter(Color.parseColor("#FFFFFF"));
    voiceSearch.setColorFilter(Color.parseColor("#FFFFFF"));
    share.setColorFilter(Color.parseColor("#FFFFFF"));
    search.setColorFilter(Color.parseColor("#FFFFFF"));
    mainView.setBackgroundColor(Color.parseColor("#ff212121"));
}

public void saveColor(boolean changeColor) {
    SharedPreferences sharedPreferences = getSharedPreferences("Color", MODE_PRIVATE);
    SharedPreferences.Editor editor = sharedPreferences.edit();
    editor.putBoolean(getPackageName() + ".change_color", changeColor);
    editor.apply();

}


  private boolean getChangeColor() {
        SharedPreferences sharedPreferences = getSharedPreferences("Color", MODE_PRIVATE);
        return sharedPreferences.getBoolean(getPackageName() + ".change_color", false);
    }
这是
MainActivity.class

mPopupMenu = new PopupMenu(this, settings);
        MenuInflater menuInflater = mPopupMenu.getMenuInflater();
        menuInflater.inflate(R.menu.main_settings, mPopupMenu.getMenu());
        settings.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                mPopupMenu.show();
                mPopupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
                    @Override
                    public boolean onMenuItemClick(MenuItem item) {

                        int id = item.getItemId();
                        if(id == R.id.menu_back_white) {
                            saveColor(true);
                        } else if (id == R.id.menu_back_black) {
                            saveColor(false);
                        }
       return false;
        }
      });
    }
  });

您需要更改以下内容:

if(id == R.id.menu_back_white) {
   saveColor(false); //I changed true to false 
} else if (id == R.id.menu_back_black) {
   saveColor(true); //I changed false to true
}
因为当“getChangeColor()”为false时,您将其设置为白色:

switchOnOff = getChangeColor();
    if (switchOnOff) {
        setColorGreyImageButton();
    } else {
        setColorWhiteImageButton();

    }

您需要更改以下内容:

if(id == R.id.menu_back_white) {
   saveColor(false); //I changed true to false 
} else if (id == R.id.menu_back_black) {
   saveColor(true); //I changed false to true
}
因为当“getChangeColor()”为false时,您将其设置为白色:

switchOnOff = getChangeColor();
    if (switchOnOff) {
        setColorGreyImageButton();
    } else {
        setColorWhiteImageButton();

    }

您是否已检查布尔值是否实际保存在共享首选项中?返回的值是多少?应用是异步的,因此如果您试图快速更改配色方案,可能没有足够的时间保存标志。不,我没有检查,因为我正在尝试登录,但无法为创建日志boolean@Spritzig-您创建了一个日志,将注销布尔值。当我退出应用程序并再次打开时,它正在保存更改,但当我单击时,它不会更改主题。您知道如何快速更新吗?@Spritzig您当然不想重新加载活动。事实上,我没有太多的经验与可抽,所以我不能帮助你与这一点。我找到了这些链接:和。也许这些可以帮助您。您是否检查过布尔值是否确实保存在共享首选项中?返回的值是多少?应用是异步的,因此如果您试图快速更改配色方案,可能没有足够的时间保存标志。不,我没有检查,因为我正在尝试登录,但无法为创建日志boolean@Spritzig-您创建了一个日志,将注销布尔值。当我退出应用程序并再次打开时,它正在保存更改,但当我单击时,它不会更改主题。您知道如何快速更新吗?@Spritzig您当然不想重新加载活动。事实上,我没有太多的经验与可抽,所以我不能帮助你与这一点。我找到了这些链接:和。也许这些可以帮助你。我已经更改了这个,但它不会自动更新视图。我需要退出应用程序,然后在打开时更改颜色,你知道如何快速更改视图吗?你在创建时调用它吗?在setContentView之前还是之后?在setContentView之后我更改了它,但它不会自动更新视图我需要退出应用程序,然后在打开时更改颜色,您知道如何快速更改视图吗?您是在OnCreate上调用它?在setContentView之前还是之后?在setContentView之后