将数据从片段保存到文件 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
版本中,必须配置此生命周期行为,但现在它是默认设置。
我有 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
版本中,必须配置此生命周期行为,但现在它是默认设置。