Android settheme()上的无限循环
我正在尝试使用活动的Android settheme()上的无限循环,android,Android,我正在尝试使用活动的setTheme()方法从片段中更改应用程序主题。但不知何故,它在试图改变的过程中永远在循环。下面是我的setTheme()方法调用 //XYZ Fragment class @Override public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { if (mThemeName.equalsIgnoreCase("Mode 1")
setTheme()
方法从片段中更改应用程序主题。但不知何故,它在试图改变的过程中永远在循环。下面是我的setTheme()
方法调用
//XYZ Fragment class
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
if (mThemeName.equalsIgnoreCase("Mode 1")) {
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES);
getActivity().setTheme(R.style.Theme_One);
} else {
getActivity().setTheme(R.style.Theme_Two);
}
super.onViewCreated(view, savedInstanceState);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
//binding object of this fragment
binding = FragmentXYZBinding.inflate(inflater);
binding.switch.setOnCheckedChangeListener((buttonView, isChecked) -> {
if(isChecked){
setTheme("Mode 2");
}else {
setTheme("Mode 1");
}
});
return inflater.inflate(R.layout.fragment_setting, container, false);
}
public void setTheme(String name) {
SharedPreferences preferences = getActivity().getSharedPreferences("app", Context.MODE_PRIVATE);
SharedPreferences.Editor editor = preferences.edit();
editor.putString("ThemeName", name);
editor.apply();
// If i call this recreate() then it goes into infinite loop
// but without calling this I can't change theme on runtime
//getActivity().recreate();
}
知道这里有什么问题吗?在oncreateview中设置主题,而不是在OnViewCreatedHanks中设置输入。但若我从oncreateView调用setTheme,那个么它不会改变主题。它保持当前主题不变。你能告诉我你是怎么写的吗。它应该会起作用。如果(IsChecked){setTheme(“模式2”);在这里设置主题,那么为什么它不起作用呢?