1

我创建了一个笔记应用程序,其中文件存储在内部存储中。我有许多与单个活动相关的片段。第一个片段有一个显示所有已保存文件的 ListView。单击 ListView 的任何项目时,会打开一个显示文件数据的新片段。该应用程序还有一个带有导航抽屉的工具栏。从第二个片段按下 Toolbar 的后退按钮时,ListView 的滚动位置保持不变。但是,单击(操作系统的)后退按钮时,ListView 会滚动回第一项。我还使用导航库从一个片段转到另一个片段。

这是我的 Fragment 包含 ListView 的代码:

CustomArrayAdapter arrayAdapter;
ArrayList<String> FilesInFolder;

FilesInFolder = GetFiles(getActivity().getFilesDir());

arrayAdapter = new CustomArrayAdapter(FilesInFolder, getContext());

Collections.sort(FilesInFolder);

listView.setAdapter(arrayAdapter);

listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

            String title = String.valueOf(parent.getItemAtPosition(position));

            Bundle bundle = new Bundle();
            bundle.putString("fileName", title);
            Navigation.findNavController(getView()).navigate(R.id.action_nav_home_to_nav_view_note, bundle);
        }
    });

这是我的第二个片段的后按代码:

@Override
public void onAttach(@NonNull Context context) {
    super.onAttach(context);
    OnBackPressedCallback callback = new OnBackPressedCallback(
            true // default to enabled
    ) {
        @Override
        public void handleOnBackPressed() {
            Navigation.findNavController(getView()).navigate(R.id.action_nav_view_note_to_nav_home);
        }
    };
    requireActivity().getOnBackPressedDispatcher().addCallback(
            this, // LifecycleOwner
            callback);
}

CustomArrayAdapter 只为 ListView 中的每个项目及其旁边的图像设置文本。

现在,即使在转到另一个片段并在后按时再次返回之后,如何保存或保持 ListView 的滚动位置?

4

0 回答 0