如何在具有给定活动参数的静态方法中使用超类



我正在尝试创建静态类ActivitySetup,用于为我的活动设置语言,主题等。我在设置主题时遇到问题。现在我有以下代码:

     static void configureTheme(Activity activity, int defaultTheme) {
     String theme = PreferenceManager.getDefaultSharedPreferences(activity).getString("theme", "light");
     assert theme != null;
     switch (theme) {
         case "light":
             activity.setTheme(R.style.AppTheme);
             break;
         case "dark":
             activity.setTheme(R.style.Theme_AppCompat);
             break;
         default:
             activity.setTheme(defaultTheme);
             break;
     }
 }

但它崩溃了。我知道我应该使用 super (of activity).setTheme 而不是 activity.setTheme ,但我该怎么做呢?如何将超类的实例作为参数传递给静态方法?

在主题之间动态切换,您只需在super.onCreate之前调用setTheme

public void onCreate(Bundle savedInstanceState) {
    setTheme(android.R.style.Theme);
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
}

谢谢。这就是我找到的答案:

    static int getThemeRes(Activity activity) throws Resources.NotFoundException {
    String theme = PreferenceManager.getDefaultSharedPreferences(activity).getString("theme", "light");
    assert theme != null;
    switch (theme) {
        case "light":
            return R.style.AppTheme;
        case "dark":
            return R.style.Theme_AppCompat;
        default:
            throw new Resources.NotFoundException();
    }
}

在所有活动中调用此方法:

    @Override
protected void onCreate(Bundle savedInstanceState) {
    setTheme(ActivitySetup.getThemeRes(this));
    super.onCreate(savedInstanceState);
    setContentView(LAYOUT); }

最新更新