如何使用 Intent 从第二个活动返回到第一个活动时保存回收器视图的最后一个项目位置



我尝试了很多可能的解决方案,但它们没有用,只是我不想使用onBackPressed来实现这一点,我正在尝试使用Intent回到上一个Activity,我试图用putExtra()传递位置并从上一个活动中的意图获取位置并使用recycleView.scrollToPosition(pos);, 但是活动被重新创建并且滚动不起作用,我也尝试使用onSavedInstanceState()onRestoreInstanceState但我得到了相同的结果,任何人都可以给我一个想法?提前谢谢。

我也想知道为什么下面的方法不起作用?

@Override
protected void onPause() {
super.onPause();
lastFirstVisiblePosition = ((LinearLayoutManager) 
recyclerView.getLayoutManager()).findLastVisibleItemPosition();
Log.d("bePos", String.valueOf(lastFirstVisiblePosition));
}
@Override
protected void onResume() {
super.onResume();
Log.d("lastPos", String.valueOf(lastFirstVisiblePosition));
recyclerView.scrollToPosition(lastFirstVisiblePosition);
}

更新我解决了保存最后一个位置的问题,但后来我发现我无法在RecyclerView中滚动到该位置,因为我使用的是分页RecyclerView只是无法滚动到适配器尚未加载的项目,那么如何解决这样的问题?

如果您希望在应用从正在运行的任务中清除(已终止)后仍将其检索,请将最后一个可见位置保存在 onSaveInstanceState 方法或首选项中。我在下面展示了两种方法:

@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
//this is when your activity is not permanent
outState.putInt("last_position", lastFirstVisiblePosition);
//save permanently
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this);
preferences.edit().putInt("last_position", lastFirstVisiblePosition).apply();
}
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
//retrieve your stored item
lastFirstVisiblePosition = savedInstanceState.getInt("last_position");
//retrieve any time except your first run
//you can add these lines in the onResume if you used the preference method
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this);
//use 0 as default
lastFirstVisiblePosition = preferences.getInt("last_position", 0);
}

我更喜欢首选项方法以获得更好的持久性,即使您的任务被终止,您仍然可以检索它。

这种方法帮助我获得了最后一个位置。只需在onBindViewHolder内的RecyclerView中添加这行代码即可

holder.setIsRecyclable(false);

最新更新