我使用一个FragmentPagerAdapter
包含几个片段,这些片段需要被通知有关database
. 我通过迭代实现回调接口的片段并调用refreshData()
方法来做到这一点。
这工作得很好,直到设备改变方向。方向更改后,即使方法调用似乎有效,片段 UI 也不会明显刷新。
从我目前所阅读的内容来看,这是因为FragmentPagerAdapter
处理片段生命周期和接收回调的片段不是实际显示的片段。
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();
}
我在每个片段中使用广播接收器临时修复了这个问题,但这个解决方案似乎很浪费,并且可能会造成内存泄漏。如何正确解决此问题?我在横向模式下使用了不同的布局和逻辑,所以我想在方向改变后使用新创建的片段。