我尝试在更改应用中的语言设置后重新创建片段和Activity,但getActivity().recreate();
部分出现错误,我无法理解原因。错误是:
E/ActivityInjector: get life cycle exception
当我试图重新创建Activity时,出现了这个错误。
public class SettingsActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.settings_activity);
getSupportFragmentManager().beginTransaction().replace(R.id.settings, new SettingsFragment()).commit();
ActionBar actionBar = getSupportActionBar();
if (actionBar != null) {
actionBar.setDisplayHomeAsUpEnabled(true);
}
}
public static class SettingsFragment extends PreferenceFragmentCompat {
ListPreference languages;
@Override
public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
setPreferencesFromResource(R.xml.root_preferences, rootKey);
}
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
languages = getPreferenceManager().findPreference("language");
languages.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference, Object newValue) {
boolean anyChanges=false;
if (newValue.toString().equals("turkish")) {
LocaleHelper.setLocale(getContext(),"tr-rTR");
anyChanges = true;
}
if (newValue.toString().equals("english")){
LocaleHelper.setLocale(getContext(),"en");
anyChanges = true;
}
if (anyChanges){
getActivity().recreate();
}
return true;
}
}
);
return super.onCreateView(inflater, container, savedInstanceState);
}
}
2条答案
按热度按时间2vuwiymt1#
我也有同样的问题,而我对这个问题的调查结果是这样的:这是小米的MIUI中的一个bug,所以我敢打赌你正在使用这个ROM(和我一样),错误发生了。
"我相信我们对此无能为力"
重现步骤
我们只需创建一个新的Android Studio项目,在Activity的布局中添加一个按钮,然后在单击按钮时重新创建()Activity即可。
MainActivity.java:
活动_主.xml:
点击Galaxy Nexus Emulator(API 28,Android 9)上的按钮,在Logcat中会显示以下输出:
点击我的第一个真实的的设备上的按钮-三星Galaxy S3(API 25,Android 7.1.2,LineageOS 14.1)-没有输出。
而另一款实体设备-小米Redmi 7(API 29,Android 10,MIUI Global 11.0.1)在每次按键和活动娱乐时都能做到这一点:
因此,当我们重新创建活动时,错误:
显然来自MIUI/小米(至少在这个实验中)。
pkmbmrz72#
是的,
recreate()
本身会导致小米设备出现错误(可能是固件或MIUI问题,但他们不在乎)。然而,即使错误显示在日志中,应用程序也不会崩溃,对我来说也是正常的。我建议将
recreate()
替换为您可以添加
overridePendingTransition(0, 0);
以避免闪烁。错误现在消失了。