#java #android #android-fragments #android-recyclerview #android-jetpack-navigation
#java #Android #android-фрагменты #android-recyclerview #android-jetpack-навигация
Вопрос:
Что я использую:
- MVP
- Навигационный компонент
- Одиночное действие
- Фрагменты
- RecyclerView
- Область
Проблема:
У меня есть MainActivity, в котором размещаются все фрагменты для потока приложения.
Есть один фрагмент, в котором есть recyclerview, чем больше я прокручиваю, тем больше запросов API выполняется. Всякий раз, когда я нажимаю один элемент для перехода к другому фрагменту и нажимаю назад, чтобы вернуться к списку, в списке есть только небольшая часть предыдущего загруженного recyclerview, я хочу все.
Возможно ли это сделать с помощью навигационного компонента?
Могу ли я запретить вызов onCreateView при каждом нажатии назад?
Я пытался сохранить представление в статической переменной, есть onSaveInstance (но оно никогда не вызывается)
Я использую навигацию таким образом:
@Override
public void onClick(View view) {
Navigation.findNavController(view)
.navigate(R.id.action_tripsFragment_to_tripDetailsFragment, bundle);
}
MainFragment:
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater,
@Nullable ViewGroup container,
@Nullable Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.trips_fragment, container, false);
mPresenter = new TripsFragmentPresenterImpl(this);
ButterKnife.bind(this, v);
navController = Navigation.findNavController(getActivity(), R.id.nav_host_fragment);
mLinearLayoutManager = new LinearLayoutManager(getContext(), RecyclerView.VERTICAL, false);
mAdapter = new PaginationAdapter(getContext());
mAdapter.setOnItemClickListener(onItemClickListener);
mPresenter.setLoadingTripsProgressBar(true);
mRecyclerView.setLayoutManager(mLinearLayoutManager);
mRecyclerView.setItemAnimator(new DefaultItemAnimator());
mRecyclerView.setAdapter(mAdapter);
mRecyclerView.addOnScrollListener(new PaginationScrollListener(mLinearLayoutManager) {
@Override
protected void loadMoreItems() {
isLoading = true;
currentPage = 1;
loadNextPage();
}
@Override
public int getTotalPageCount() {
return currentPage;
}
@Override
public boolean isLoading() {
return isLoading;
}
});
loadFirstPage();
return v;
}
Чего я ожидаю:
Всякий раз, когда я нажимаю назад из TripDetails в Trips, я хочу получить свой recyclerview таким, каким он был, с предыдущими загруженными элементами в правильном положении.
Текущие результаты:
Всякий раз, когда я нажимаю назад из TripDetails в Trips, recyclerview удаляет элементы только из тех элементов, которые видны, что означает, что мы потеряем элементы, ранее загруженные на предыдущих страницах.
Ответ №1:
Для дальнейшего использования мне удалось решить проблему, создав ModelView для сохранения независимости данных от жизненного цикла фрагмента