将数据从片段保存到文件AndroidStudio

时间:2020-08-25 12:54:23

标签: java android-studio android-fragments android-viewpager

我有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还是很陌生,所以希望您能从中学到一些入门技巧。

1 个答案:

答案 0 :(得分:0)

我不会使用PageChangeListener,因为这在错误的范围内,并且破坏了使用片段的概念。错误的作用域可能就是为什么获取字段文本会返回空并且为何PageChangeListener触发得太晚而无法从Fragment获取详细信息。

尝试将FragmentStatePagerAdapter用于适配器https://developer.android.com/reference/androidx/fragment/app/FragmentStatePagerAdapter

因为这可以自动保存Fragment的状态以供以后还原(尽管不会将其保存到文件中)。

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

在当前版本的ViewPager中,当Fragment的onPause方法不再是主Fragment(屏幕上的那个)时,将调用它,因此请将save方法放入Fragment的{{1} }。
当片段成为主要片段时,将调用片段的onPause方法,这是您从文件中“还原”的地方。

请注意,在旧的onResume版本上,必须配置此生命周期行为,但现在是默认行为。