在FragmentPagerAdapter中重新创建片段

问题描述:

我正在创建具有两个页面的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; 
    } 
} 

我想要的第一页上的一些变化(例如变化微调所选项目)造成的第二页上的变化。

正如我已阅读关于片段通信(https://developer.android.com/training/basics/fragments/communicating.html)并了解片段只能通过活动进行通信。

对于这种情况我已经创建公共接口,我的第一个页面类片段

public interface CurrencyListener { 
    public void onCurrencyChanged(); 
} 

而且在我的活动实现它。

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

但问题是:

如何重建第二页片段在我FragmentPagerAdapter?

片段创建操作繁重。

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

因此,不是重新创建FirstPageFragment,而是根据currencyChanged()方法收到的回调来刷新数据。 在这种情况下,每创建一次currencyChanged()方法,就会创建一次片段并更新数据。

HistoryFragment代码(片段被刷新)

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); 
     } 
} 
+0

谢谢,但如何从第一片段刷新第二片段的数据或从我的活动?你可以给我代码示例或一些额外的解释吗? –

+0

请参考代码 –