我有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还是很陌生,所以希望您能从中学到一些入门技巧。
答案 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
版本上,必须配置此生命周期行为,但现在是默认行为。