我有一个调查应用程序,它使用viewpager和片段的arraylist实现。片段具有不同的视图类型,一些具有单选按钮,一些输入框。我希望当用户从一个片段导航到另一个片段时,将输入的数据保存到父活动中的共享变量。当用户到达最后一个片段时,我想显示数据摘要。当用户从一个片段导航到下一个片段时,我正在考虑保存数据。也不确定这是否是最佳方式。
List<Question> questions = new SurveyServiceImpl(getApplicationContext()).getSurveyQuestions(1);
ArrayList<Fragment> questionFragments = new ArrayList<>();
questionFragments.add(HomeFragment.newInstance("", ""));
for (int i = 0; i < questions.size(); i++) {
switch (questions.get(i).getQuestionType()) {
case SELECT:
if (questions.get(i).getMaximumOptionsRequired() == 1)
questionFragments.add(QuestionTypeSelect.newInstance("", questions.get(i)));
else
questionFragments.add(QuestionTypeCheckBox.newInstance("", questions.get(i)));
break;
case INPUT:
questionFragments.add(QuestionTypeInput.newInstance("", questions.get(i)));
break;
default:
}
}
questionFragments.add(EndFragment.newInstance("", ""));
final ViewPager pager = (ViewPager) findViewById(R.id.viewPager);
pager.setAdapter(new MyPagerAdapter(getSupportFragmentManager(), questionFragments));
答案 0 :(得分:0)
脱离我的头顶:
在每个片段中更改数据后立即保存数据:
对于EditTexts,请使用TextWatcher:(example)在afterTextChanged()中更改时保存文本。
对于RadioButtons,如果您使用的是RadioGroup radioGroup.setOnCheckedChangeListener,请使用radioButton.setOnClickListener(/ **在onClick * /中保存数据)或(example)。
可能不是最有效的解决方案,但可以工作:)。
答案 1 :(得分:0)
使用OnPageChangeListener:所有滚动;页面居中;页面滚动更改(开始拖动,完成中心动画)
pager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { }
@Override public void onPageSelected(int position) { }
@Override
public void onPageScrollStateChanged(int state) {
if (state == ViewPager.SCROLL_STATE_DRAGGING) {
//User started moving current page
}});
答案 2 :(得分:0)
嗯。除非您在向导流中执行某种保存检查标记,并且要表示该页面的所有数据都已保存,否则我不会亲自去那条路线。您可以轻松识别pageChanged侦听器
vpMain.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
//Generated method stub
}
@Override
public void onPageSelected(int position) {
setCurrentPage(position);
PAGE_TO_RETURN_TO = position;
vpMain.setCurrentItem(PAGE_TO_RETURN_TO);
validate data and allow to scroll or save
}
@Override
public void onPageScrollStateChanged(int state) {
//Generated Method Stub
}
});
但我更希望看到父活动句柄的onPause()个人保存数据。但这实际上取决于您对该应用的需求。