是否有一种方法可以在背面按下新导航组件以恢复recyclerview上的状态

问题描述 投票:1回答:1

我在用什么:

  • MVP
  • 导航组件
  • 单一活动
  • 片段
  • RecyclerView
  • 领域

问题:

我有一个MainActivity,它承载应用程序流的所有片段。

有一个片段有一个recyclerview,我滚动越多的API请求就越多。每当我按下一个项目导航到另一个片段然后按回去返回列表时,列表中只有一小段先前加载的Recyclerview,我想要一切。

是否可以使用导航组件执行此操作?

我可以在每次按下时阻止onCreateView被调用吗?

我试图将View保存在一个静态变量中,有一个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会将项目切割为仅可见的项目,这意味着我们将丢失之前页面中之前加载的项目。

java android android-fragments android-recyclerview android-jetpack-navigation
1个回答
0
投票

为了将来的参考,我设法通过创建ModelView来保持数据独立于片段的生命周期来解决问题

© www.soinside.com 2019 - 2024. All rights reserved.