我刚刚实现了一种在我的应用中更改主题的方法。按下按钮会在SharedPreferences中设置一个值,然后重新创建Activity,并且由于标志而更改主题。
问题是如何处理后退栈。简单地重新创建Activity并不好,因为按下硬件返回按钮将继续上一个Activity(使用旧的主题),而如果用户执行以下操作:
从Activity A开始> B> C>按下更改主题按钮>按下硬件返回按钮
那么我希望他们被带回到Activity B,并且正确应用了新主题。到目前为止,我找到的最佳解决方案是基于对象层次结构重新创建后退栈,如下所示:
Intent intent = new Intent();
intent.setClass(activity, activity.getClass());
TaskStackBuilder stackBuilder = TaskStackBuilder.create(activity);
stackBuilder.addNextIntentWithParentStack(intent);
stackBuilder.startActivities(new Bundle());
然而我们应用程序中的Activity层级结构并没有很好地定义(即C可以有多个父Activity),因此上述代码可能会导致用户在按下返回按钮后返回到一个意想不到的Activity。
是否有一种清晰的方法可以基于实际的返回栈而不是Activity层级结构来重新构建返回栈?