我以编程方式更改了我的应用程序的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中是否可以刷新片段视图
答案 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() 分隔,如果要分离然后立即重新附加片段。