我有一个片段,其中包含一个充满自定义视图的viewpager。
从我的“设置活动”返回时,MainActivity获取活动结果,并且(如果语言已更改),则调用recreate()。
调试时,我看到自定义视图通过onAttachedToWindow()和onDetachedToWindow(),最后以onAttachedToWindow()结束,但它们再也没有调用onDraw(Canvas c),即使我在视图寻呼机上调用invalidate()或自定义视图本身,因此自定义视图不会显示在页面上。
我也试过调用setRetainInstance(true);在onCreateView for the Fragment中。
我还应该尝试什么?
答案 0 :(得分:1)
我遇到了与活动相同的问题,我发现的唯一方法是再次销毁和创建活动:
public void setLanguage(Context context, String languageToLoad) {
Resources res = context.getResources();
// Change locale settings in the app.
DisplayMetrics dm = res.getDisplayMetrics();
android.content.res.Configuration conf = res.getConfiguration();
conf.locale = new Locale(languageToLoad.toLowerCase());
res.updateConfiguration(conf, dm);
Intent intent = new Intent(getApplicationContext(), MainMenuActivity.class);
startActivity(intent);
finish();
}
我知道这不是最好的方式,但我希望它可以帮助你。
我发现了这个:
if (Build.VERSION.SDK_INT >= 11) {
recreate();
} else {
Intent intent = getIntent();
intent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
finish();
overridePendingTransition(0, 0);
startActivity(intent);
overridePendingTransition(0, 0);
}
此处How do I restart an Android Activity
还要记住从FragmentManager中删除你的片段:
Fragment fragment = getSupportFragmentManager().findFragmentByTag(TAG_FRAGMENT);
if(fragment != null)
getSupportFragmentManager().beginTransaction().remove(fragment).commit();