有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

屏幕旋转后未保存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();
    }
}

我怀疑整个问题在于,当屏幕旋转时,列表被重新创建,因此无法恢复到以前的位置


共 (2) 个答案

  1. # 1 楼答案

    对于这种情况,您必须使用模型视图-视图模型mvvm,您可以获得更多详细信息;来自官方网站的教程,也可以看到一些教程的例子