Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/183.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 在FragmentPagerAdapter中重新创建片段_Android_Android Fragments_Fragmentpageradapter - Fatal编程技术网

Android 在FragmentPagerAdapter中重新创建片段

Android 在FragmentPagerAdapter中重新创建片段,android,android-fragments,fragmentpageradapter,Android,Android Fragments,Fragmentpageradapter,我正在创建一个应用程序,它有两个页面的FragmentPagerAdapter FragmentPagerAdapter的类如下所示 public static class AppSectionsPagerAdapter extends FragmentPagerAdapter { public AppSectionsPagerAdapter(FragmentManager fm) { super(fm); } @Override public

我正在创建一个应用程序,它有两个页面的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;
    }
}
我希望第一页上的某些更改(例如更改微调器选定项)会导致第二页上的更改

正如我已经阅读了关于片段通信()的内容,并且理解片段只能通过活动进行通信

对于这种情况,我在第一个页面类片段中创建了公共接口

public interface CurrencyListener {
    public void onCurrencyChanged();
}
并在我的活动中实施它

现在我可以从我的第一个页面片段调用活动中的void onCurrencyChanged

但问题是:


如何在我的FragmentPagerAdapter中重新创建第二个页面片段?

片段创建操作很繁重

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

因此,与其重新创建FirstPageFragment,不如根据在
currencyChanged()
方法上收到的回调刷新数据。 在这种情况下,片段将创建一次,并且每次调用
currencyChanged()
方法时都会更新数据

历史片段代码(要刷新的片段)

活动(将刷新数据)


片段创建操作很繁重

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

因此,与其重新创建FirstPageFragment,不如根据在
currencyChanged()
方法上收到的回调刷新数据。 在这种情况下,片段将创建一次,并且每次调用
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
    }
}
public class MyActivity extends Activity {
    /**
     * Other method goes here
     */
    private IUpdateData dataUpdateListener;

    public void setOnUpdateListener(IUpdateData listener){
        dataUpdateListener = listener;
    }


    public void onCurrencyChanged(){
        if(dataUpdateListener!=null){
            dataUpdateListener.updateData(/**Update Data**/);
        }
    }

        public interface IUpdateData{
            void updateData(Object o);
        }
}