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



我有Fragment1和Fragment2。Fragment1是EditText的一种形式,它将数据保存到文本文件中。我希望用户能够在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:nn";
//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();
}
}
}

我是安卓工作室和Java的新手,所以非常感谢一些初学者友好的提示。

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

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

因为这可以自动保存片段的状态以备以后恢复(但不会将其保存到文件中(。

如果你真的想把它保存到一个文件中,然后触发片段中的保存,这将是正确的范围。

在当前版本的ViewPager中,当Fragment不再是主Fragment(屏幕上的那个(时,会调用Fragment的onPause方法,所以将保存方法放在Fragment中的onPause
Fragment的onResume方法是在Fragment成为主要Fragment时调用的,这就是您要执行的"恢复";来自文件。

请注意,在旧的Viewpager版本上,必须对这种生命周期行为进行配置,但现在它是默认的。

最新更新