activity.recreate() 后不会再次调用自定义视图 onDraw()
Custom view onDraw() does not get called again after activity.recreate()
我有一个 Fragment,它有一个充满自定义视图的 viewpager。
从我的设置 Activity 返回时,MainActivity 获取 activity 结果并且(如果语言更改)调用 recreate()。
调试时,我看到自定义视图经过 onAttachedToWindow() 和 onDetachedToWindow() 并最终在 onAttachedToWindow() 结束,但它们再也不会调用 onDraw(Canvas c),即使我调用 invalidate () 在视图分页器或自定义视图本身上,因此自定义视图不会显示在页面上。
我也试过调用 setRetainInstance(true);在片段的 onCreateView 中。
我还应该尝试什么?
我遇到了和你一样的 activity 问题,我找到的唯一方法是再次破坏并创建 activity:
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();
我有一个 Fragment,它有一个充满自定义视图的 viewpager。
从我的设置 Activity 返回时,MainActivity 获取 activity 结果并且(如果语言更改)调用 recreate()。
调试时,我看到自定义视图经过 onAttachedToWindow() 和 onDetachedToWindow() 并最终在 onAttachedToWindow() 结束,但它们再也不会调用 onDraw(Canvas c),即使我调用 invalidate () 在视图分页器或自定义视图本身上,因此自定义视图不会显示在页面上。
我也试过调用 setRetainInstance(true);在片段的 onCreateView 中。
我还应该尝试什么?
我遇到了和你一样的 activity 问题,我找到的唯一方法是再次破坏并创建 activity:
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();