2017-10-29 143 views
0

我正在創建具有兩個頁面的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?

回答

2

片段創建操作繁重。

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

請參考代碼 –

相關問題