要保存和恢复FirebaseUI RecyclerView的滚动状态,您可以使用SharedPreferences来存储和读取滚动位置。下面是一个示例解决方案:
public class ScrollStateHelper {
private static final String PREF_NAME = "RecyclerViewScroll";
private static final String KEY_POSITION = "position";
private static final String KEY_OFFSET = "offset";
public static void saveScrollState(Context context, RecyclerView recyclerView) {
SharedPreferences sharedPreferences = context.getSharedPreferences(PREF_NAME, Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPreferences.edit();
int position = ((LinearLayoutManager) recyclerView.getLayoutManager()).findFirstVisibleItemPosition();
View firstVisibleView = recyclerView.getChildAt(0);
int offset = (firstVisibleView == null) ? 0 : (firstVisibleView.getTop() - recyclerView.getPaddingTop());
editor.putInt(KEY_POSITION, position);
editor.putInt(KEY_OFFSET, offset);
editor.apply();
}
public static void restoreScrollState(Context context, RecyclerView recyclerView) {
SharedPreferences sharedPreferences = context.getSharedPreferences(PREF_NAME, Context.MODE_PRIVATE);
int position = sharedPreferences.getInt(KEY_POSITION, 0);
int offset = sharedPreferences.getInt(KEY_OFFSET, 0);
recyclerView.scrollToPosition(position);
recyclerView.post(() -> {
View firstVisibleView = recyclerView.getChildAt(0);
if (firstVisibleView != null) {
recyclerView.scrollBy(0, firstVisibleView.getTop() - offset);
}
});
}
}
public class MainActivity extends AppCompatActivity {
private RecyclerView mRecyclerView;
private FirebaseRecyclerAdapter mAdapter;
@Override
protected void onPause() {
super.onPause();
ScrollStateHelper.saveScrollState(this, mRecyclerView);
}
@Override
protected void onResume() {
super.onResume();
ScrollStateHelper.restoreScrollState(this, mRecyclerView);
}
// 其他代码...
}
请注意,您需要替换适用于您的实际情况的RecyclerView变量(mRecyclerView)和FirebaseRecyclerAdapter变量(mAdapter)。
这样,您就可以保存和恢复FirebaseUI RecyclerView的滚动状态了。每当用户离开Activity时,滚动位置将被保存,并在用户返回时自动恢复。