Sam*_*age 98 android android-fragments
在一个TableView
应用程序中,我将数据从a加载Fragment
到Fragment
内部a Fragment
.但是,当我TableView
将Fragment
它显示以前的数据.我可以Fragment
使用当前数据而不是以前的数据重新填充吗?
Fan*_*mas 193
我想你想在db update上刷新片段内容
如果是这样,请分离片段并重新连接
// 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();
Run Code Online (Sandbox Code Playgroud)
Your_Fragment_TAG是您在创建片段时为其提供的名称
此代码用于支持库.
如果您不支持旧设备,只需使用getFragmentManager而不是getSupportFragmentManager
[编辑]
此方法要求Fragment具有标记.
如果您没有它,那么@ Hammer的方法就是您所需要的.
Mbe*_*ane 136
这将刷新当前片段:
FragmentTransaction ft = getFragmentManager().beginTransaction();
if (Build.VERSION.SDK_INT >= 26) {
ft.setReorderingAllowed(false);
}
ft.detach(this).attach(this).commit();
Run Code Online (Sandbox Code Playgroud)
Ham*_*mer 29
如果您没有片段标记,以下代码适用于我.
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();}
}
Run Code Online (Sandbox Code Playgroud)
Kau*_*iya 11
您可以在用户可见时刷新您的片段,只需将此代码添加到您的 Fragment 中,这将在您可见时刷新您的片段。
@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
super.setUserVisibleHint(isVisibleToUser);
if (isVisibleToUser) {
// Refresh your fragment here
getFragmentManager().beginTransaction().detach(this).attach(this).commit();
Log.i("IsRefresh", "Yes");
}
}
Run Code Online (Sandbox Code Playgroud)
如果您使用 NavController,请尝试以下操作 (kotlin):
val navController = findNavController()
navController.run {
popBackStack()
navigate(R.id.yourFragment)
}
Run Code Online (Sandbox Code Playgroud)
要刷新片段,可接受的答案将不适用于牛轧糖及更高版本。要使其在所有操作系统上都能正常工作,您可以执行以下操作。
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
fragmentManager.beginTransaction().detach(this).commitNow();
fragmentManager.beginTransaction().attach(this).commitNow();
} else {
fragmentManager.beginTransaction().detach(this).attach(this).commit();
}
Run Code Online (Sandbox Code Playgroud)
小智 6
如果您使用导航组件,
您可以使用navigate(this_fragment_id)
导航到此片段,但在新实例中。此外,您还必须先弹出后退堆栈才能删除实际的片段。
科特林
val navController: NavController =
requireActivity().findNavController(R.id.navHostFragment)
navController.run {
popBackStack()
navigate(R.id.this_fragment_id)
}
Run Code Online (Sandbox Code Playgroud)
爪哇
NavController navController =
requireActivity().findNavController(R.id.navHostFragment);
navController.popBackStack();
navController.navigate(R.id.this_fragment_id);
Run Code Online (Sandbox Code Playgroud)
当片段附加到Activity时,您将无法重新加载该片段,在该活动中会出现“ Fragment Already Added
”异常。
因此,必须先将片段与其活动分离,然后再附加。可以使用流利的api在一行中完成所有操作:
getFragmentManager().beginTransaction().detach(this).attach(this).commit();
Run Code Online (Sandbox Code Playgroud)
更新: 这是为了合并对API 26及更高版本所做的更改:
FragmentTransaction transaction = mActivity.getFragmentManager()
.beginTransaction();
if (Build.VERSION.SDK_INT >= 26) {
transaction.setReorderingAllowed(false);
}
transaction.detach(this).attach
(this).commit();
Run Code Online (Sandbox Code Playgroud)
有关更新的更多说明,请参见/sf/answers/3592920831/
归档时间: |
|
查看次数: |
232638 次 |
最近记录: |