我尝试了很多可能的解决方案,但它们没有用,只是我不想使用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);