简体   繁体   English

如何从ViewPager收集数据?

[英]How can I gather data from my ViewPager?

I made an activity which is simply a viewpager with a few tabs. 我做了一个活动,它只是一个带有几个标签的viewpager。 Each tab is like a form that the user needs to fill out. 每个选项卡都像用户需要填写的表单。 When the user is done, the data from the view pager should be collected and sent back as a result. 用户完成后,应收集来自视图寻呼机的数据并将其作为结果发回。 I almost have this working but for some reason the data on my first tab seems to get reset when the user gets to the third tab. 我几乎有这个工作,但由于某种原因,当用户进入第三个选项卡时,我的第一个选项卡上的数据似乎被重置。 I'm guessing this is due to some view recycling in the pager. 我猜这是由于寻呼机中的某些视图回收。 Anyways, I'm wondering if there is some easy way to gather all the data from the different tabs or do I have to create some kind of tight coupling between the activity and viewpager object? 无论如何,我想知道是否有一些简单的方法来收集不同标签中的所有数据,或者我是否必须在activity和viewpager对象之间创建某种紧密耦合?

you have to use SmartFragmentStatePagerAdapter as described here " https://guides.codepath.com/android/ViewPager-with-FragmentPagerAdapter " and than need to 您必须使用SmartFragmentStatePagerAdapter,如此处所述“ https://guides.codepath.com/android/ViewPager-with-FragmentPagerAdapter ”并且需要

vpPager.setOffscreenPageLimit(3);

Your issue should be resolved. 你的问题应该得到解决。 :) :)

A viewpager will kill off the fragment if it is 2 pages away from the current page. 如果距离当前页面2页,则viewpager将终止该片段。 It then recreates it when the pager is on a page that is 1 step away from it. 然后,当寻呼机位于距离它1步的页面上时,它会重新创建它。

You should move your form data into your activity/fragment that is holding the viewpager and use fragment listeners to update your data accordingly 您应该将表单数据移动到持有viewpager的activity / fragment中,并使用片段侦听器相应地更新数据

For example, you could use a fragment listener like below to pass the data to/from the containing activity 例如,您可以使用如下所示的片段侦听器将数据传递到包含活动或从包含活动传递数据

public interface MyFragmentListener{
    void saveMyFormData(MyFormData formData);
    MyFormData getFormData();
}
private MyFragmentListener mListener;

//initialise fragment listener in onAttach (or elsewhere)

private void initFormView(){
    MyFormData data = mListener.getFormData();
    //do stuff with data
}

private void saveData(){
    mListener.saveMyFormData(myFormDataObject);
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM