当前位置: 首页 > 知识库问答 >
问题:

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

富勇军
2023-03-14

我有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) {
            }

和我的“save totxtfile”代码:

    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个答案

经正祥
2023-03-14

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

尝试对适配器使用FragmentStatePagerAdapterhttps://developer.android.com/reference/androidx/fragment/app/FragmentStatePagerAdapter

因为这样可以自动保存片断的状态,以便以后恢复(虽然不会保存到文件中)。

如果你真的想要把它保存到一个文件中,那么在片段中触发保存,这将是正确的作用域。

viewpager的当前版本中,当片断不再是主要片断(屏幕上的片断)时,将调用片断的onpause方法,因此将保存方法放在片断的onpause中。
片断成为主要片断时,将调用片断的onresum方法,这是从文件中进行“还原”的地方。

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

 类似资料:
  • 问题内容: Go的新手(我正在研究的第一个简单项目)。 问题:如何从URL获取图像,然后将其保存到计算机中? 这是我到目前为止的内容: 但是,当我运行此代码时,我得到 我假设我必须将image.Image(变量)转换为未定义的字节数?那是解决这个问题的正确方法吗? 问题答案: 无需解码文件。只需将响应正文复制到您打开的文件中即可。这是修改后的示例中的交易: 是数据流,并实现了接口-意味着您可以按顺

  • 问题内容: 我正在尝试重组在Excel文件中组织降水数据的方式。为此,我编写了以下代码: 这段代码运行良好,通过Jupyter,我可以看到结果是不错的 但是,尝试将此数据帧保存到csv文件时遇到问题。 结果文件包含垂直索引列,看来我无法调用特定的单元格。 (希望有人可以帮助我解决这个问题)非常感谢! 问题答案: 全部在文档中。 您有兴趣跳过索引列,因此: 如果您还想跳过标题,请添加: 我不知道您的

  • (希望有人能帮我解决这个问题)非常感谢!!

  • 我有一个包含EditText的片段,当我单击该EditText时,会出现一个DatePicker对话框来选择日期。 FragmentFile 对话框片段 问题是我不知道如何将数据(选定日期)从DialogFraank传递到片段? 我读了一些主题,但这并没有帮助我感到困惑(抱歉再次提出这个问题)。 主题1主题2

  • 问题内容: 我看到过很多不同的文章,涉及到您应该以何种方式将对象序列化到文件,并且所有这些在本质上在执行方式和最佳实践方面存在冲突。因此,这就是我要保存的内容: 我们可以假设configArgs的大小已知,我需要制作一个文件,这就是到目前为止的内容。 问题答案: 好吧,我想,您想将对象直接写入文件 我只是提供了重要的代码。通过异常处理来实现。

  • 问题内容: 我正在尝试将数据快速保存到plist文件中,但是读取plist时保存的数据没有显示出来。这是我正在使用的代码。 编辑:我听说做到这一点的最佳方法是写入documents目录,所以我的问题是我应该如何写入该目录中的文件? 问题答案: 显然该文件不在可写位置,因此我在documents目录中创建了该文件。 然后,必须从文档目录中读取它。