3 回答
TA贡献1824条经验 获得超8个赞
由于缺少更好的解决方案,我为我准备了这个工作:假设我有1个活动(MyActivity),并且相互替换的片段很少(一次只能看到一个)。
在MyActivity中,添加以下侦听器:
getSupportFragmentManager().addOnBackStackChangedListener(getListener());
(如您所见,我正在使用兼容性包)。
getListener实现:
private OnBackStackChangedListener getListener()
{
OnBackStackChangedListener result = new OnBackStackChangedListener()
{
public void onBackStackChanged()
{
FragmentManager manager = getSupportFragmentManager();
if (manager != null)
{
MyFragment currFrag = (MyFragment) manager.findFragmentById(R.id.fragmentItem);
currFrag.onFragmentResume();
}
}
};
return result;
}
MyFragment.onFragmentResume()按下“返回”后将被调用。一些注意事项:
假设您已将所有交易添加到后台(使用 FragmentTransaction.addToBackStack())
每次更改堆栈时都会激活它(您可以将其他内容存储在后堆栈中,例如动画),因此您可能会收到同一片段实例的多个调用。
TA贡献1851条经验 获得超3个赞
我对建议的解决方案做了一些更改。这样对我更好地工作:
private OnBackStackChangedListener getListener() {
OnBackStackChangedListener result = new OnBackStackChangedListener() {
public void onBackStackChanged() {
FragmentManager manager = getSupportFragmentManager();
if (manager != null) {
int backStackEntryCount = manager.getBackStackEntryCount();
if (backStackEntryCount == 0) {
finish();
}
Fragment fragment = manager.getFragments()
.get(backStackEntryCount - 1);
fragment.onResume();
}
}
};
return result;
}
TA贡献1812条经验 获得超5个赞
Android Developers的以下部分介绍了一种通信机制,该机制创建活动的事件回调。引用其中的一行:
做到这一点的一种好方法是在片段内定义一个回调接口,并要求主机活动实现它。当活动通过接口收到回调时,它可以根据需要与布局中的其他片段共享信息。
编辑: 该片段有一个onStart(...)当用户可见该片段时调用的。同样,onResume(...)当可见且正在运行时。这些与他们的活动对应物相关。简而言之:使用onResume()
- 3 回答
- 0 关注
- 429 浏览
添加回答
举报