我有片段容器活动,我根据操作替换片段。在一个片段中,我提供了更改app的主要颜色的选项。因此用户可以更改工具栏和其他组件的色彩。 但在应用主题后我重新创建活动,因此基本活动中的工具栏也会使用新的颜色代码重新初始化。
现在我的问题是我的应用程序序列是这样的 设置>用户设置>主题设置
因此,当用户更改主题时,我希望在重新创建后再次显示相同的片段。 我也看到了其他问题和应用逻辑,但不适合我。
更改主题的代码
private void setThemePreference(String primary, String primaryDark, String text) {
int requiredLength = 0;
if (primary.length() < 6) {
requiredLength = 6 - primary.length();
for (int i = 0; i < requiredLength; i++) {
primary = "0" + primary;
}
}
if (primaryDark.length() < 6) {
requiredLength = 6 - primaryDark.length();
for (int i = 0; i < requiredLength; i++) {
primaryDark = "0" + primaryDark;
}
}
if (text.length() < 6) {
requiredLength = 6 - text.length();
for (int i = 0; i < requiredLength; i++) {
text = "0" + text;
}
}
UserPreferenceManager.preferencePutString(
AppConstants.SharedPreferenceKeys.PrimaryColor,primary);
UserPreferenceManager.preferencePutString(
AppConstants.SharedPreferenceKeys.PrimaryDarkColor, primaryDark);
UserPreferenceManager.preferencePutString(
AppConstants.SharedPreferenceKeys.PrimaryTextColor, text);
UserPreferenceManager.preferencePutBoolean(
AppConstants.SharedPreferenceKeys.IS_ThemeChanged, true);
TaskStackBuilder.create(getActivity())
.addNextIntent(new Intent(getActivity(), MainActivity.class))
.addNextIntent(getActivity().getIntent())
.startActivities();
// applied this also
//getActivity().recreate();
getActivity().overridePendingTransition(0, 0);
}
打开主题片段的代码
getActivity().getSupportFragmentManager()
.beginTransaction()
.setCustomAnimations(R.anim.slide_in_right, R.anim.slide_out_left)
.addToBackStack(TAG)
.replace(R.id.container, fragment)
.commit();
请大家帮忙。我没有太多的经验,甚至没有新的开发人员。
答案 0 :(得分:0)
试试这个,它可能会有所帮助,因为你已经存储了is_theme,
现在使用Intent重新启动活动
startActivity(new Intent(MainActivity.this,MainActivity.class));
当活动在其onResume方法中启动时,检查主题是否已更改,如果更改了主题,则调用片段
@Override
protected void onResume() {
super.onResume();
if(UserPreferenceManager.preferencePutBoolean(
AppConstants.SharedPreferenceKeys.IS_ThemeChanged, true)){
UserPreferenceManager.preferencePutBoolean(
AppConstants.SharedPreferenceKeys.IS_ThemeChanged, false)
YourActivity activity = (YourActivity) getActivity();
activity.goToSecondFragment();
}
}
方法
public void goToSameFragment(){
FragmentTransaction ft = getFragmentManager().beginTransaction();
Fragment sameFragment = new sameFragment();
ft.replace(R.id.fragment_container, sameFragment);
ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
ft.addToBackStack(null);
ft.commit();
}