我创建了一个笔记应用程序,其中文件存储在内部存储中。我有许多与单个活动相关的片段。第一个片段有一个显示所有已保存文件的 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 的滚动位置?