我尝试了很多可能的解决方案,但它们没有用,只是我不想使用onBackPressed
来实现这一点,我试图回到之前的Activity
使用Intent
,我尝试使用putExtra()
传递位置并从上一个Activity中的intent获取位置并使用recycleView.scrollToPosition(pos);
,但是重新创建了Activity并且滚动不起作用,我也尝试使用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
只是无法滚动到适配器尚未加载的项目,那么如何解决这个问题?
答案 0 :(得分:0)
在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);
}
我更喜欢偏好方法以获得更好的持久性,即使你的任务被杀死,你仍然可以检索它。
答案 1 :(得分:0)
这种方法帮助我获得了最后职位。只需在 onBindViewHolder
中的 RecyclerView 中添加此行代码holder.setIsRecyclable(false);