是否可以刷新片段的视图

时间:2012-03-27 12:02:32

标签: android android-layout android-intent android-widget 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);

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

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

BackStackEntry latestEntry=fragMgr.getBackStackEntryAt(fragMgr.getBackStackEntryCount()-1);
String str=latestEntry.getName();
Fragment fragment=fragMgr.findFragmentByTag(str);

在我获得当前显示的片段后,我想刷新视图,但该怎么做? Android中是否可以刷新片段视图

4 个答案:

答案 0 :(得分:35)

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

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

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

答案 1 :(得分:2)

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

答案 2 :(得分:0)

我终于找到了解决方案! 只需在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个小时后终于找到了解决方案!

答案 3 :(得分:0)

最终对我有用的解决方案是在 Kotlin 中:

        val manager = requireActivity().supportFragmentManager
        
        manager.beginTransaction().let {
            it.detach(this)
            it.commit()
        }
        manager.executePendingTransactions()
        manager.beginTransaction().let {
            it.attach(this)
            it.commit()
        }

注意我如何在单独的事务中分离和重新附加片段From the Android docs:

<块引用>

由于 FragmentTransaction 被视为单个原子操作集,因此在同一事务中对同一片段实例的 detach 和 attach 调用有效地相互抵消,从而避免了片段 UI 的破坏和立即重新创建。使用单独的事务,如果使用 commit(),则使用 executePendingOperations() 分隔,如果要分离然后立即重新附加片段。