有没有办法在按下后退的新导航组件上恢复 recyclerview 上的状态
Is there a way on the new navigation component on back pressed to restore the state on recyclerview
我正在使用的是:
- MVP
- 导航组件
- 单身Activity
- 碎片
- RecyclerView
- 境界
问题:
我有一个 MainActivity 托管应用程序流的所有片段。
有一个片段具有回收视图,我滚动得越多,发出的 API 请求就越多。每当我按一个项目导航到不同的片段并按回 return 到列表时,该列表只有一小部分以前加载的 recyclerview,我想要一切。
是否可以使用导航组件执行此操作?
我可以防止每次按下后退时调用 onCreateView 吗?
我尝试将视图保存在静态变量中,有一个 onSaveInstance(但它从未被调用)
我是这样使用导航的:
@Override
public void onClick(View view) {
Navigation.findNavController(view)
.navigate(R.id.action_tripsFragment_to_tripDetailsFragment, bundle);
}
主要片段:
@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 会将项目剪切为仅可见的项目,这意味着我们将丢失之前在之前页面中加载的项目。
为了将来参考,我设法通过创建一个 ModelView 来使数据独立于片段的生命周期来解决问题
我正在使用的是:
- MVP
- 导航组件
- 单身Activity
- 碎片
- RecyclerView
- 境界
问题:
我有一个 MainActivity 托管应用程序流的所有片段。
有一个片段具有回收视图,我滚动得越多,发出的 API 请求就越多。每当我按一个项目导航到不同的片段并按回 return 到列表时,该列表只有一小部分以前加载的 recyclerview,我想要一切。
是否可以使用导航组件执行此操作?
我可以防止每次按下后退时调用 onCreateView 吗?
我尝试将视图保存在静态变量中,有一个 onSaveInstance(但它从未被调用)
我是这样使用导航的:
@Override
public void onClick(View view) {
Navigation.findNavController(view)
.navigate(R.id.action_tripsFragment_to_tripDetailsFragment, bundle);
}
主要片段:
@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 会将项目剪切为仅可见的项目,这意味着我们将丢失之前在之前页面中加载的项目。
为了将来参考,我设法通过创建一个 ModelView 来使数据独立于片段的生命周期来解决问题