将数据从片段保存到文件 Android Studio

Saving data from fragment to file AndroidStudio

我有 Fragment1 和 Fragment2。 Fragment1 是 EditTexts 的一种形式,它将其数据保存到文本文件中。我希望用户能够在 Fragment1 和 Fragment2 之间来回滑动,每次滑动时,Fragment1 的数据都会保存到一个文件中。

到目前为止,我已经使用 ViewPager 将每个表单实现为一个新片段,并使用 addOnPageChangeListener 在用户每次滑动时保存文件。这有效,但用户输入的数据完全是空的。

这是我当前用于用户滑动保存位置的代码:

    viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
            @Override
            public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
            }

            @Override
            public void onPageSelected(int position) {

                //Saves the data into an array of strings (this is a small snippet)
                Details = new String[2];

                //This line saves!
                Details[0] = "Details:\n\n";

                //This line contains only "Detail1" in the file 
                Details[1] = "Detail1: " + Detail1.getText().toString().trim() + "\n";
              
                saveToTxtFile(Details);

            }

            @Override
            public void onPageScrollStateChanged(int state) {
            }

我的 'saveToTxtFile' 代码:

    private void saveToTxtFile(String[] Details) {
        if (Details != null) {

            try {
                File myDir = new File(getFilesDir().getAbsolutePath());
                FileWriter fw = new FileWriter(myDir + "/" + fileName(), false);

                for (String Detail : Details) {
                    fw.write(Detail);
                }
                fw.close();

                Toast.makeText(this, "Saved to " + getFilesDir() + "/" + fileName(), Toast.LENGTH_LONG).show();

            } catch (IOException e) {
                e.printStackTrace();

            }
        }

    }

我是 Android Studio 和 Java 的新手,希望能提供一些适合初学者的提示。

我不会使用 PageChangeListener,因为它在错误的范围内并且破坏了使用片段的概念。错误的范围可能是为什么将字段 returns 的文本设为空并且 PageChangeListener 触发得太晚而无法从片段中获取详细信息的原因。

尝试为您的适配器使用 FragmentStatePagerAdapter https://developer.android.com/reference/androidx/fragment/app/FragmentStatePagerAdapter

因为这可以自动保存 Fragment 的状态以供以后恢复(虽然它不会将其保存到文件中)。

如果您真的想将其保存到文件中,然后在片段中触发保存,这将是正确的范围。

在当前版本的 ViewPager 中,片段的 onPause 方法在它不再是主要片段(屏幕上的片段)时被调用,因此将您的保存方法放在片段的 onPause.
Fragment 的 onResume 方法在 Fragment 成为主要 Fragment 时被调用,这是您从文件执行“恢复”的地方。

请注意,在旧 Viewpager 版本中,必须配置此生命周期行为,但现在它是默认设置。