gpt4 book ai didi

android - FragmentPagerAdapter - 如何处理方向变化?

转载 作者:IT王子 更新时间:2023-10-28 23:34:04 27 4
gpt4 key购买 nike

我使用了一个 FragmentPagerAdapter,其中包含几个需要通知 database 更改的 Fragment。我通过迭代实现回调接口(interface)的 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();
}

我在每个 fragment 中使用广播接收器临时修复了此问题,但此解决方案似乎很浪费并且可能会造成内存泄漏。如何正确解决此问题?我在横向模式下使用不同的布局和逻辑,因此我想在方向更改后使用新创建的 fragment 。

最佳答案

是的,就像你说的 FragmentManager 在方向改变后处理 fragment ,所以适配器中的 getItem 不会被调用。但是您可以覆盖方法 instantiateItem() ,即使在方向更改后也会调用该方法并将 Object 转换为 Fragment 并将其保存在您的数组中。

 @Override
public Object instantiateItem(ViewGroup container, int position) {
DataFragment fragment = (DataFragment) super.instantiateItem(container, position);
fragments[position] = fragment;
return fragment;
}

关于android - FragmentPagerAdapter - 如何处理方向变化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17629463/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com