2017-10-29 5 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

조각 생성 작업이 많이 걸립니다.

조각을 다시 만들면 모든보기가 만들어지고 이전 조각이 가비지 수집되어야합니다. 따라서 추가 메모리가 필요합니다.

따라서 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

코드를 참조하십시오. –

관련 문제