android - 从 viewpager 中的 fragment 获取数据

标签 android android-fragments android-viewpager

我有一个带有 viewpager 的 fragment 和其他 7 个 fragment 。这些 fragment 用于输入用户详细信息。在最后一个 fragment 中,有一个“提交”按钮,我需要在其中获取在其他 fragment 中输入的所有用户详细信息。我该怎么做

我看到了this没有帮助的问题。所以请不要将此问题标记为重复。

基础 fragment :

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;
}
}

我应该在其中获取所有其他 fragment 数据的最终 fragment :

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;
  }
 }

最佳答案

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

您可以创建一个 Fragment 的子类,所有 fragment 都将继承自该子类。这个子类将有一个 getText 方法(或一些其他类型的公共(public)方法),它从 EditText View 中获取文本。

对于其他类型的数据(如开关),您可以使用类似的函数从 fragment 中获取数据。

已编辑

因此您可以创建一个派生自 Fragment 的新 fragment 。

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

    public String getEntryText() {}
}

然后您使用现有的 fragment 并扩展您的新 fragment ..

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();
    }
}

然后提交..

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

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

关于android - 从 viewpager 中的 fragment 获取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39728133/

相关文章:

android - 如何通过 FragmentPagerAdapter 将变量传递给 fragment ?

android - Cordova CLI 在 Android 上覆盖 Plugman 插件?

android - 如何以编程方式打开和显示手机的消息收件箱..?

android - Parse.com 身份验证错误 : Unable to respond to any of these challenges: {oauth=www-authenticate: OAuth realm ="https://api.twitter.com"}

android - Android 2.2.1、2.3、2.0 中的 fragment 。这可能吗?

android - Tablayout 和 viewpager 缩放和平移

android - 未调用 fragment 定稿

java - 主页按钮在旋转时从抽屉图标变为向上按钮 - 仅当抽屉导航打开时

java - Android 应用程序因 imageview 崩溃

android - 在 ViewPager 中滑动到新页面会导致旧页面丢失状态