刷新片段重新加载

android应用程序中,我将数据从Db加载到FragmentTableView 。 但是,当我Reloadfragment它显示了以前的数据。 我可以使用当前数据而不是以前的数据重新填充Fragment吗?

我想你想刷新数据库更新片段的内容

如果是的话,分离片段并重新附加

 // Reload current fragment Fragment frg = null; frg = getSupportFragmentManager().findFragmentByTag("Your_Fragment_TAG"); final FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); ft.detach(frg); ft.attach(frg); ft.commit(); 

Your_Fragment_TAG是您创build片段时所使用的名称

此代码用于支持库。

如果您不支持较旧的设备,只需使用getFragmentManager而不是getSupportFragmentManager

[编辑]

这个方法需要Fragment有一个标签。
如果你没有,那么@ Hammer的方法就是你所需要的。

这将刷新当前片段:

 FragmentTransaction ft = getFragmentManager().beginTransaction(); ft.detach(this).attach(this).commit(); 

如果你没有片段标签,下面的代码适合我。

 Fragment currentFragment = getActivity().getFragmentManager().findFragmentById(R.id.fragment_container); if (currentFragment instanceof "NAME OF YOUR FRAGMENT CLASS") { FragmentTransaction fragTransaction = (getActivity()).getFragmentManager().beginTransaction(); fragTransaction.detach(currentFragment); fragTransaction.attach(currentFragment); fragTransaction.commit();} } 

使用ContentProvider并使用“CursorLoader”加载数据。 有了这个架构,您的数据将自动重新加载数据库更改。 为您的ContentProvider使用第三方框架 – 您并不是真的想自己实现它…

  MyFragment fragment = (MyFragment) getSupportFragmentManager().findFragmentByTag(FRAGMENT_TAG); getSupportFragmentManager().beginTransaction().detach(fragment).attach(fragment).commit(); 

这只会在你使用FragmentManager初始化片段时才起作用。 如果你把它作为XML中的<fragment ... /> ,它将不会再次调用onCreateView 。 浪费了我30分钟的时间来解决这个问题。

我有同样的问题,但以上都没有为我的工作。 要么是有一个backstack问题(加载后,当用户按下它将再次去相同的片段),或者没有调用onCreaetView

最后我做到了这一点:

 public void transactFragment(Fragment fragment, boolean reload) { FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); transaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE); if (reload) { getSupportFragmentManager().popBackStack(); } transaction.replace(R.id.main_activity_frame_layout, fragment); transaction.addToBackStack(null); transaction.commit(); } 

好的一点是你不需要片段的标签或ID。 如果你想重新加载

 getFragmentManager().beginTransaction().detach(this).attach(this).commit();