是否可以刷新片段的视图

Lee*_*fin 21 android android-widget android-intent android-layout android-fragments

我以编程方式更改了locale我的应用程序,如下所示:

Resources res = context.getResources();

 DisplayMetrics dm = res.getDisplayMetrics();
 android.content.res.Configuration conf = res.getConfiguration();
 conf.locale = new Locale("cn");
 res.updateConfiguration(conf, dm);
Run Code Online (Sandbox Code Playgroud)

在此之后,我想刷新当前显示的片段视图以显示新的区域设置.

所以,我首先得到当前片段(这是最新的片段backstack):

BackStackEntry latestEntry=fragMgr.getBackStackEntryAt(fragMgr.getBackStackEntryCount()-1);
String str=latestEntry.getName();
Fragment fragment=fragMgr.findFragmentByTag(str);
Run Code Online (Sandbox Code Playgroud)

在我获得当前显示的片段后,我想刷新它的视图,但是如何做到这一点?在Android中是否可以刷新片段的视图

Zee*_*bAs 35

您可以简单地分离和附加片段,如下所示

    Fragment currentFragment = getFragmentManager().findFragmentByTag("FRAGMENT");
    FragmentTransaction fragTransaction = getFragmentManager().beginTransaction();
    fragTransaction.detach(currentFragment);
    fragTransaction.attach(currentFragment);
    fragTransaction.commit();
Run Code Online (Sandbox Code Playgroud)

这将刷新视图,并且区域设置将更改

  • 帮助避免未来用户出现问题的快速说明:在google群组中:https://groups.google.com/forum/#!topic/installer -platform/QlkLMsncDwg Dianne Hackborn表示在"FragmentTransaction"中分离片段不会为`Fragment`调用`onAttach()`或`onDetach()`.因此,不要依赖这些生命周期方法来刷新视图. (5认同)
  • 这似乎仅适用于以编程方式附加到活动的片段.对于已由活动的XML布局文件实例化的片段,仅在恢复活动时调用onActivityCreated,因此片段仍显示旧的本地化. (2认同)

Mim*_*ito 2

您可以创建一个侦听器,当区域设置更改时将调用该侦听器。然后,这将删除该片段,并重新添加该片段。然后应该会选择您的新区域设置。

  • 监听器应该在哪里创建?您能更具体地说明如何做吗? (3认同)