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();