检测用户是否在viewpager中从片段中滑出

时间:2017-09-29 17:03:53

标签: java android android-fragments android-viewpager

我有一个调查应用程序,它使用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));

3 个答案:

答案 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()个人保存数据。但这实际上取决于您对该应用的需求。