刷新片段重新加载
在android
应用程序中,我将数据从Db
加载到Fragment
的TableView
。 但是,当我Reload
的fragment
它显示了以前的数据。 我可以使用当前数据而不是以前的数据重新填充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();