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());
}
});