我最近将Fragments添加到我的应用程序中。对于新的应用程序,我需要得到 我的片段显示后立即通知。所以我可以尽快做一些计算 片段再次显示。
My Fragment与TabIndicator一起使用,它只使用了一个FragmentClass 几次。
这是正常的标准覆盖类:
@Override
public void onHiddenChanged(boolean hidden) {
super.onHiddenChanged(hidden);
}
答案 0 :(得分:11)
我有同样的问题。
我使用标准指南实践工作片段(Building a Flexible UI)。 我有两个片段(ListItemsFragment和InfoItemFragment)。 当使用正常的屏幕大小时,我在InfoItemFragment和。替换ListItemsFragment onHiddenChanged方法不会调用自动。
FragmentTransaction mFragmentTransaction = getFragmentManager().beginTransaction();
mFragmentTransaction.replace(R.id.container_fragment, new InfoItemFragment(), "tag_fr_infoItem");
mFragmentTransaction.addToBackStack(null);
mFragmentTransaction.commit();
我认为我们必须调用hide方法FragmentTransaction。例如:
ListItemsFragment mListItemsFragment;
FragmentTransaction mFragmentTransaction = getFragmentManager().beginTransaction();
mFragmentTransaction.replace(R.id.container_fragment, new InfoItemFragment(), "tag_fr_infoItem");
if (mListItemsFragment != null) {
mFragmentTransaction.hide(mListItemsFragment);
}
mFragmentTransaction.addToBackStack(null);
mFragmentTransaction.commit();
现在onHiddenChanged的方法工作正常。当用户点击后退按钮时,mListItemsFragment再次显示,方法onHiddenChanged称为自动。
在文件中说: 只要片段从
更改状态,就会调用我认为我们必须手动更改值然后调用方法。
答案 1 :(得分:8)
仍在寻找答案? onHiddenChanged在第一次显示片段时不会被调用。只有当它改变状态时。
来自文档:
当片段的隐藏状态(由isHidden()返回时)发生更改时调用。片段开始没有隐藏;只要片段从那里改变状态,就会调用它。
答案 2 :(得分:3)
您可以使用 setUserVisibleHint 方法解决类似的问题。希望它可以帮到你。
@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
super.setUserVisibleHint(isVisibleToUser);
if (isVisibleToUser) {
// Do some your work
} else {
// Do your Work
}
}