Android 是否可以刷新片段的视图

Android 是否可以刷新片段的视图,android,android-layout,android-intent,android-widget,android-fragments,Android,Android Layout,Android Intent,Android Widget,Android Fragments,我以编程方式更改了应用程序的区域设置,如下所示: Resources res = context.getResources(); DisplayMetrics dm = res.getDisplayMetrics(); android.content.res.Configuration conf = res.getConfiguration(); conf.locale = new Locale("cn"); res.updateConfiguration(conf, dm); 在此

我以编程方式更改了应用程序的
区域设置
,如下所示:

Resources res = context.getResources();

 DisplayMetrics dm = res.getDisplayMetrics();
 android.content.res.Configuration conf = res.getConfiguration();
 conf.locale = new Locale("cn");
 res.updateConfiguration(conf, dm);
在此之后,我想刷新当前显示的片段视图,以使用新的区域设置显示

因此,我首先得到当前片段(这是
backstack
中的最新片段):


在我得到当前显示的片段后,我想刷新它的视图,但是怎么做呢?在Android中是否可以刷新片段的视图?您可以创建一个侦听器,当区域设置更改时将调用该侦听器。这将删除片段,然后重新添加片段。然后,您的新区域设置将被选中。

您只需按如下所示分离并附加片段即可

    Fragment currentFragment = getFragmentManager().findFragmentByTag("FRAGMENT");
    FragmentTransaction fragTransaction = getFragmentManager().beginTransaction();
    fragTransaction.detach(currentFragment);
    fragTransaction.attach(currentFragment);
    fragTransaction.commit();

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

我终于找到了解决方案! 只需在UI线程中运行视图更新代码

示例-

 getActivity().runOnUiThread(new Runnable() {
            @Override
            public void run() {
                user_arrayList.add(name);
                adapter.notifyDataSetChanged();
                tv_total_users.setText("Total Users : "+user_arrayList.size());
            }
        });

经过近4-5个小时的尝试,终于找到了这个解决方案

你的意思是使视图无效吗?@blackbelt,不,我的意思是刷新,就像它在网页上的工作方式一样,如果你从网页中选择一种语言,该网页将被刷新。应该在哪里创建侦听器?您能否更具体地说明如何操作?创建您自己的界面,该界面由您的活动实现。然后在onAttach()中使用片段注册侦听器。当您更改区域设置时,调用接口中的方法,并删除/重新添加片段,但是如何向片段发送一些数据?我现在在顶部看到一个空白视图。您如何将数据发送到fragment?您应该使用fragment.setArguments(Bundle extra);方法来传递数据。当您刷新片段时,数据将保持不变,这样您就不会有任何问题。是的,我这样做了,但是MyFragment类没有调用片段生命周期。这似乎只适用于以编程方式附加到活动的片段。对于已由活动的XML布局文件实例化的片段,只有在活动恢复时才会调用ActivityCreated,因此该片段仍显示旧的本地化。为帮助未来用户避免问题,请注意:在google组中:Dianne Hackborn指出,在
FragmentTransaction
不会为该
片段调用
onAttach()
onDetach()
。因此,不要依赖这些生命周期方法来刷新视图。即使问题已经存在2年了。。。我觉得这是你能做的最糟糕的事了。您应该真正使用
onCreate
onResume
 getActivity().runOnUiThread(new Runnable() {
            @Override
            public void run() {
                user_arrayList.add(name);
                adapter.notifyDataSetChanged();
                tv_total_users.setText("Total Users : "+user_arrayList.size());
            }
        });