在activity.recreate()之后不再调用onDraw()的自定义视图

时间:2016-03-22 13:37:41

标签: android android-lifecycle

我有一个片段,其中包含一个充满自定义视图的viewpager。

从我的“设置活动”返回时,MainActivity获取活动结果,并且(如果语言已更改),则调用recreate()。

调试时,我看到自定义视图通过onAttachedToWindow()和onDetachedToWindow(),最后以onAttachedToWindow()结束,但它们再也没有调用onDraw(Canvas c),即使我在视图寻呼机上调用invalidate()或自定义视图本身,因此自定义视图不会显示在页面上。

我也试过调用setRetainInstance(true);在onCreateView for the Fragment中。

我还应该尝试什么?

1 个答案:

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