从ViewPager内部的片段获取数据

Ton*_*hew 5 android android-fragments android-viewpager

我有一个带有Viewpager的FRAGMENT,还有其他7个片段。这些片段用于输入用户详细信息。在最后一个片段中,有一个“提交”按钮,在这里我需要获取在其他片段中输入的所有用户详细信息。我怎样才能做到这一点

我看到这个问题没有帮助。因此,请不要将此问题标记为重复。

基本片段

public class Register_Layout extends Fragment implements ViewPager.OnPageChangeListener{
public Register_Layout(){}

static ViewPager viewPager1;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.fragment_register_layout,  container, false);

    viewPager1 = (ViewPager) view.findViewById(R.id.view_pager1);
    viewPager1.setOffscreenPageLimit(7);
    FragmentManager fragmentManager =  getActivity().getSupportFragmentManager();
    viewPager1.setAdapter(new MyAdapter(fragmentManager));

    return view;
}

@Override
public void onPageScrolled(int position, float positionOffset, int    positionOffsetPixels) {

}

@Override
public void onPageSelected(int position) {

}

@Override
public void onPageScrollStateChanged(int state) {

}

}

class MyAdapter extends FragmentPagerAdapter{

public MyAdapter(FragmentManager fm) {
    super(fm);
}

@Override
public Fragment getItem(int position) {
    Fragment fragment = null;
    if(position==0)
    {
        fragment = new Register();
    }

    if(position==1)
    {
        fragment = new Register_Page2();
    }

    if(position==2)
    {
        fragment = new Register_Page3();
    }

    if(position==3)
    {
        fragment = new Register_Page4();
    }

    if(position==4)
    {
        fragment = new Register_Page5();
    }

    if(position==5)
    {
        fragment = new Register_Page6();
    }

    if(position==6)
    {
        fragment = new Register_Page7();
    }
    return fragment;
}

@Override
public int getCount() {
    return 7;
}
}
Run Code Online (Sandbox Code Playgroud)

我应该获得所有其他片段数据的最终片段:

public class Register_Page7 extends Fragment {
public Register_Page7(){

}

EditText editText;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.fragment_register_page7, container, false);

    Button Previous = (Button) view.findViewById(R.id.Previous7);
    Button Regiter = (Button) view.findViewById(R.id.Submit);
    Regiter.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(getActivity());
            alertDialogBuilder.setMessage("Are you sure you want to submit?");

            alertDialogBuilder.setPositiveButton("Yes",new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface arg0, int arg1) {

                }
            });
            alertDialogBuilder.setNegativeButton("No,Let me check the details again", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialogInterface, int i) {

                }
            });

            AlertDialog alertDialog = alertDialogBuilder.create();
            alertDialog.show();
        }
    });

    Previous.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            new Register_Layout().viewPager1.setCurrentItem(5);

        }
    });
    return view;
  }
 }
Run Code Online (Sandbox Code Playgroud)

Rya*_*ord 1

您可能希望使用片段管理器来获取所有实例化的片段,并循环遍历它们以获取其相关数据。

Fragment您可以创建所有片段都继承自的子类。这个子类将有一个getText方法(或其他类型的公共方法),从视图中获取文本EditText

对于其他类型的数据(如开关),您将具有类似的函数来从片段中获取数据。

已编辑

因此,您可以创建一个派生自 的新片段Fragment

public class BaseEntryFragment extends Fragment {
    public BaseEntryFragment() {}

    public String getEntryText() {}
}
Run Code Online (Sandbox Code Playgroud)

然后,您使用现有的片段并扩展新的片段。

public class Register_Page7 extends BaseEntryFragment {

    private EditText _editText;

    public Register_Page7() {}

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {
        //other create view code
        _editText = (EditText)FindViewById(R.id.edit_text);
    }

    @Override
    public String getEntryText() {
        return _editText.getText();
    }
}
Run Code Online (Sandbox Code Playgroud)

然后随着你的提交..

List<Fragment> fragments = getActivity().getSupportFragmentManager().getFragments();
for(Fragment frag : fragments) {
    // do type checks here
    BaseEntryFragment f = (BaseEntryFragment)frag;
    String someValue = f.getEntryText();
}
Run Code Online (Sandbox Code Playgroud)

请注意,我的 Java 确实很生疏,所以它可能不是完美的语法。这只是一些帮助您入门的代码,不可复制和粘贴。