当我们通过使用RecyclerView中的项目列表(这些项目是从Firebase JSON中检索到的项目)使用itemclicklistener进入下一个Detail Activity时,如何保存RecylerView Activity的滚动位置,并在回到Recylerview Activity并且我正在使用时恢复位置LinearLayoutManager
请帮助我 在此先感谢
答案 0 :(得分:0)
问题陈述不清楚。还是我要回答。
假设您点击列表开始新的活动。根据活动的生命周期,后台活动将保持滚动状态。当您完成新活动后,返回活动将处于相同状态。
这可能是由于以下原因造成的
答案 1 :(得分:0)
通过onPause
方法在Activity上保存状态,并通过onResume()
方法将其恢复
查看代码
public class Activity extends AppCompatActivity
{
private final String STATE = "recycler_state";
private RecyclerView mRecyclerView;
private static Bundle mBundle;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_list);
mRecyclerView = (RecyclerView) findViewById(R.id.recycler_view);//set to whatever view id you use
// don't forget to set your adapter
}
@Override
protected void onPause()
{
super.onPause();
// save RecyclerView state
mBundle = new Bundle();
Parcelable listState = mRecyclerView.getLayoutManager().onSaveInstanceState();
mBundle.putParcelable(STATE, listState);
}
@Override
protected void onResume()
{
super.onResume();
// restore RecyclerView state
if (mBundle != null) {
Parcelable listState = mBundle.getParcelable(STATE);
mRecyclerView.getLayoutManager().onRestoreInstanceState(listState);
}
}
}
答案 2 :(得分:0)
我不太清楚你的问题。我以为您当前的活动在转到下一个细节时已被销毁,因此在您返回时重新创建了活动。当您转到下一个详细信息时,请勿致电finish
,而只需致电onBackPressed
返回上一个活动。这将保持您的recyclerView状态和位置。
无论如何,您可以使用Shared Preferences保存位置,然后再转到下一个细节并将其放回到onResume
上。
答案 3 :(得分:0)
您可以使用此技巧:
int firstItemPos = mLayoutManager.findFirstVisibleItemPosition();
View v = mLayoutManager.findViewByPosition(firstItemPos);
int offsetPixel = 0;
if(v != null) offsetPixel = v.getTop();
然后恢复位置:
mLayoutManager.scrollToPositionWithOffset(firstItemPos, offsetPixel)
您可以保存firstItemPos和offsetPixel额外的活动包。在我的示例中,mLayoutManager使用普通的LinearLayoutManager并将其设置为我的回收视图:
mLayoutManager = new LinearLayoutManager(getActivity())