У меня есть основное действие с ViewPager с двумя вкладками. Каждая вкладка содержит фрагмент.Как перезагрузить LoaderManager Fragment из хостинга?
Один из этих фрагментов содержит RecyclerView и FAB, который показывает DialogFragment при нажатии, что позволяет пользователю добавлять новый элемент в RecyclerView. Этот фрагмент также реализует интерфейс LoaderCallbacks (данные RecyclerView подкреплен курсорами):
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;
}
...
}
Внутри этого DialogFragment класса я объявляю интерфейс для обратных вызовов положительных и отрицательных пуговиц:
public class SaveDialogFragment extends DialogFragment {
...
public interface SaveDialogListener {
void onSaveDialogPositiveClick(String str1, String str2);
}
...
}
Поскольку я использую метод SaveDialogFragment.onAttach() для получения ссылки на хостинг этого диалога, мне нужно реализовать SaveDialogListener в MainActivity (а не в фрагменте):
public class MainActivity extends AppCompatActivity implements SaveDialogFragment.SaveDialogListener {
@Override
protected void onCreate(Bundle savedInstanceState) {
...
mViewPager = (ViewPager) findViewById(R.id.viewPager);
setupViewPager(mViewPager);
TabLayout tabs = (TabLayout) findViewById(R.id.tabs);
tabs.setupWithViewPager(mViewPager);
}
@Override
public void onSaveDialogPositiveClick(String name, String number) {
...
saveItem(new ItemRow(name, number));
// HERE I MUST RESET THE LOADER, BUT HOW???
// getLoaderManager().restartLoader(0, null, ???);
}
}
Итак, вкратце: я запускаю DialogFragment из фрагмента, и этот DialogFragment уведомляет об активности хостинга, когда пользователь добавляет новый элемент.
Я сомневаюсь, что я использую LoaderManager внутри Фрагмента (поскольку Fragment отвечает за инициализацию Loader и его сброс). Но когда вызывается onSaveDialogPositiveClick, как может Activity перезагрузить загрузчик фрагмента? Как самый правильный способ справиться с этим сценарием?
С переходником ViewPager держит ссылку на фрагменты, кажется, неправильно держать ссылку на фрагмент в деятельности только для перезапуска LoaderManager:
getLoaderManager().restartLoader(0, null, showListFragment);
Спасибо заранее.
спасибо! он отлично работает – mevqz