0

두 개의 탭이있는 ViewPager의 주 활동이 있습니다. 각 탭에는 조각이 있습니다.Fragment의 LoaderManager를 액티비티 호스트에서 다시 시작하는 방법은 무엇입니까?

이러한 조각 중 하나에는 사용자가 RecyclerView에 새 항목을 추가 할 수 있도록 클릭 할 때 DialogFragment를 표시하는 RecyclerView 및 FAB이 포함되어 있습니다.

public class SaveDialogFragment extends DialogFragment { 
    ... 
    public interface SaveDialogListener { 
     void onSaveDialogPositiveClick(String str1, String str2); 
    } 
    ... 
} 

: 나는 긍정적이고 부정적인 버튼의 콜백에 대한 인터페이스를 선언이 DialogFragment 클래스의 내부

public class MyListFragment extends Fragment 
     implements LoaderManager.LoaderCallbacks<Cursor> { 

    @Override 
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { 
     View view = inflater.inflate(R.layout.fragment_list, container, false); 

     FloatingActionButton fab = (FloatingActionButton) view.findViewById(R.id.fab); 
     fab.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       DialogFragment dialog = SaveDialogFragment.newInstance(); 
       dialog.show(getFragmentManager(), "SaveDialogFragment"); 
      } 
     }); 

     mRecyclerView = (RecyclerView) view.findViewById(R.id.recyclerView); 
     ... 
     getLoaderManager().initLoader(0, null, this); 
     return view; 
    } 

    ... 
} 

이 조각은 또한합니다 (RecyclerView 데이터가 커서에 의해 백업됩니다)을 LoaderCallbacks 인터페이스를 구현 SaveDialogFragment.onAttach() 메서드를 사용하여이 Dialog의 호스팅에 대한 참조를 얻으므로 MainActivity (조각이 아닌)에 SaveDialogListener를 구현해야합니다.

요약하면 : Fragment에서 DialogFragment를 시작합니다.이 DialogFragment는 사용자가 새 항목을 추가 할 때 호스팅 활동에 알립니다.

내가 조각의 내부에서 LoaderManager를 사용하고 있다는 사실에 의심의 여지가 있습니다. 조각이 Loader를 초기화하고 재설정 할 책임이 있기 때문입니다. 그러나 onSaveDialogPositiveClick이 호출 될 때 어떻게 Activity가 Fragment의 Loader를 다시 시작할 수 있습니까? 이 시나리오를 처리하는 가장 올바른 방법은 무엇입니까? 사전에

getLoaderManager().restartLoader(0, null, showListFragment); 

감사하십시오 ViewPager의 어댑터 이후

은 단지 LoaderManager를 다시 시작 단지의 활동에 조각에 대한 참조를 유지하는 잘못된 것 같습니다 조각에 대한 참조를 보유하고 있습니다.

답변

1

나는 이렇게 할 것이다. 메서드를 사용하여 콜백 인터페이스 SaveDialogListener를 만들었습니다. Calling Fragment (MyListFragment)에 구현하십시오. DialogFragment 생성 중에 호출하는 조각 인 MyListFragment를 대상 조각으로 설정하십시오. 이 메소드를 사용하려면 dialogFrag.setTargetFragment (MyListFragment.this, 0). 이제이 인터페이스를 사용하여 조각에 데이터를 보낼 수 있습니다. 당신의 DialogFragment 클래스에서

,

SaveDialogListener callback = 
      (SaveDialogListener) getTargetFragment(); 
callback. onSaveDialogPositiveClick(param1,param2); 

참고 : 사용 getChildFragmentManager는() DialogFragment를 표시합니다.

조각 내에서 콜백을받을 수 있습니다. 그리고 거기에 loadermanager를 다시로드 할 수 있습니다.

+0

감사합니다. 완벽하게 작동합니다. – mevqz