我使用一个包含多个Fragment的FragmentPagerAdapter
,这些Fragment需要被通知关于数据库
的变化。我通过遍历实现了一个回调接口的Fragment并调用refreshData()
方法来完成此操作。
这一切都很好,直到设备方向发生改变。在方向更改后,尽管方法调用似乎起作用,但Fragment UI并没有可见地刷新。
根据我目前所了解的,这是因为FragmentPagerAdapter
处理Fragment的生命周期,而接收回调的Fragment并非实际显示的Fragment。
private class DataPagerAdapter extends FragmentPagerAdapter {
private DataFragment[] fragments = new DataFragment[] {
new FooDataFragment(), BarDataFragment()};
public DataPagerAdapter(android.support.v4.app.FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int position) {
return fragments[position];
}
@Override
public int getCount() {
return fragments.length;
}
public DataFragment[] getFragments() {
return fragments;
}
}
protected void refreshData() {
for (DataFragment dataFragment : mPagerAdapter.getFragments()) {
dataFragment.refreshData();
}
我暂时使用了每个片段内的广播接收器来解决这个问题,但这种解决方法似乎很浪费并可能会导致内存泄漏。我应该如何正确解决?由于我在横屏模式下使用不同的布局和逻辑,所以我希望在方向更改后仍然可以使用新创建的片段。