屏幕旋转后未保存java RecyclerView位置
屏幕旋转后未保存RecyclerView位置并移动到列表的开头。
RecyclerView
ааааааааааааааа{
@Override
public void onPause() {
super.onPause();
state = RLM_tasks.onSaveInstanceState();
}
帮助找出列表不保存位置的原因并解决此问题
Fragment
完全
public class FragmentList extends Fragment {
CardView cv_list;
private FirebaseFirestore firebaseFirestore = FirebaseFirestore.getInstance();
private CollectionReference collectionReference = firebaseFirestore.collection("Tasks");
private AdapterTasksList adapterTasksList;
private RecyclerView rv_tasks;
private RecyclerView.LayoutManager RLM_tasks;
Parcelable state;
public static FragmentList newInstance() {
return new FragmentList();
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
return inflater.inflate(R.layout.fragment_list, container, false);
}
@Override
public void onViewCreated(@NonNull final View view, @Nullable Bundle savedInstanceState)
{
cv_list = requireView().findViewById(R.id.cv_list);
cv_list.setOnClickListener(v -> requireActivity().onBackPressed());
Query query = collectionReference.orderBy("TurnTasks", Query.Direction.DESCENDING);
FirestoreRecyclerOptions<ItemTasks> firestoreRecyclerOptions = new FirestoreRecyclerOptions.Builder<ItemTasks>()
.setQuery(query, ItemTasks.class)
.build();
adapterTasksList = new AdapterTasksList((ClickTasksBlanc) getContext(), firestoreRecyclerOptions);
adapterTasksList.startListening();
rv_tasks = requireView().findViewById(R.id.rv_list);
RLM_tasks = new LinearLayoutManager(getActivity());
RLM_tasks.onRestoreInstanceState(state);
rv_tasks.setHasFixedSize(false);
rv_tasks.setLayoutManager(RLM_tasks);
rv_tasks.setNestedScrollingEnabled(true);
rv_tasks.setAdapter(adapterTasksList);
}
@Override
public void onPause() {
super.onPause();
state = RLM_tasks.onSaveInstanceState();
}
}
我怀疑整个问题在于,当屏幕旋转时,列表被重新创建,因此无法恢复到以前的位置
# 1 楼答案
对于这种情况,您必须使用模型视图-视图模型mvvm,您可以获得更多详细信息;来自官方网站的教程,也可以看到一些教程的例子
# 2 楼答案
可以在ViewModel中保存layoutManager状态,然后在重新创建片段时获取状态值
您可以在这里查看示例代码https://code.luasoftware.com/tutorials/android/android-jetpack-navigation-lost-state-after-navigation/#maintain-state-via-viewmodel