Есть ли способ с помощью нового навигационного компонента при обратном нажатии восстановить состояние в recyclerview

#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 для сохранения независимости данных от жизненного цикла фрагмента