2017-10-29 21 views
0

2ページのFragmentPagerAdapterを持つアプリケーションを作成しています。FragmentPagerAdapterでフラグメントを再作成

FragmentPagerAdapterのクラスは、私が最初のページにいくつかの変更が(例えばスピナー選択項目の変更)2ページ目の変化を引き起こしたことをしたい、この

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(); 
} 

でパブリックインターフェイスを作成し、私の活動でそれを実装しました。このケースでは

私の最初のページの断片から自分のアクティビティでvoid onCurrencyChangedを呼び出すことができます。

しかし、問題は次のとおりです。

私FragmentPagerAdapterに第2ページの断片を再作成する方法は?

答えて

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

おかげで、どのように最初のフラグメントから第2のフラグメント内のデータをリフレッシュしますか、私の活動からですか?コード例や追加の説明を教えてください。 –

+0

コードを参照してください –

関連する問題