在FragmentPagerAdapter中重新创建片段

时间:2017-10-29 05:18:39

标签: android android-fragments fragmentpageradapter

我正在创建具有两个页面的FragmentPagerAdapter的应用程序。

FragmentPagerAdapter的类看起来像这样

public static class AppSectionsPagerAdapter extends FragmentPagerAdapter {

    public AppSectionsPagerAdapter(FragmentManager fm) {
        super(fm);
    }

    @Override
    public Fragment getItem(int i) {
        Fragment fragment;
        switch (i) {
            case 0: fragment = new CurrentRateFragment(); break;
            case 1: fragment = new HistoryFragment(); break;
            default: fragment = new CurrentRateFragment(); break;
        }

        return fragment;
    }

    @Override
    public int getCount() {
        return 2;
    }
}

我希望第一页上的某些更改(例如更改Spinner所选项目)导致第二页上的更改。

正如我所读到的片段通信(https://developer.android.com/training/basics/fragments/communicating.html)并了解片段只能通过Activity进行通信。

对于这种情况,我在我的第一个页面类片段

中创建了公共接口
public interface CurrencyListener {
    public void onCurrencyChanged();
}

并在我的活动中实施。

现在我可以从我的第一页片段中调用我的Activity中的void onCurrencyChanged。

但问题是:

如何在FragmentPagerAdapter中重新创建第二页片段?

1 个答案:

答案 0 :(得分:2)

片段创建操作很重。

1。如果重新创建片段,则将创建所有视图,并且需要对之前的片段进行垃圾回收。因此会有额外的记忆。

因此,不是重新创建FirstPageFragment,而只是根据static方法收到的回调刷新数据。 在这种情况下,片段将被创建一次,每次调用currencyChanged()方法时都会更新数据。

HistoryFragment Code(要刷新的片段)

currencyChanged()

活动(将刷新数据)

public class HistoryFragment extends Fragment implements MyActivity.IUpdateData{
    /**
     * Other method goes here
     */

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        //
        if(getActivity() instanceof /**Your Activity**/){
            ((/**Your Activity**/)getActivity()).setOnUpdateListener(this);
        }
        return super.onCreateView(inflater, container, savedInstanceState);
    }

    @Override
    public void updateData(Object object) {
        //Refresh Data
    }
}