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”);在这里设置主题,那么为什么它不起作用呢?