2016-09-27 73 views
2

我有一个viewpager与7个其他片段的片段。这些片段用于输入用户详细信息。在最后一个片段中,有一个“提交”按钮,我需要获取在其他片段中输入的所有用户详细信息。我该怎么做从viewpager内部的片段获取数据

我看到this没有帮助的问题。所以请不要标记这个问题重复。

基片段

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

最后的片段,我应该得到所有其他碎片的数据:

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

很高兴看到代码。也许你最初是如何实例化片段的。 –

+0

举行第二个@RyanAlford –

+0

你可以在你的活动中创建一个临时数组或其他数据结构,并使用接口回调来存储数据 –

回答

0

你可能会想使用片段经理获得所有实例化的片段,并循环遍历它们以获取它们的相关数据。

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

对于其他类型的数据(如交换机),您将具有类似的功能从片段中获取数据。

编辑

所以,你可以创建一个从Fragment派生的新片段。

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

    public String getEntryText() {} 
} 

然后你把你现有的片段和扩展新的片段..

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是真的很生疏,所以它可能不是完美的语法。这只是一些让你开始的代码,并不打算被复制和粘贴。

+0

你能多解释一下吗?对不起,我是Android新手。我无法理解你说的一切。请帮助 –

+0

用代码更新。 –

0

我认为每个片段都比较容易,您将用户数据存储在SharedPreference(数据结构可以是json字符串或任何您喜欢的),在结尾(最后一个片段)读取共享pref数据,以及执行注册

希望帮助

0

我建议你使用一个Activity握住你ViewPager,并声明有变量,或者您想从Fragments拯救的对象。

在每一个Fragment你想保存数据,你必须使用interface传递数据到Activity。下面是做到这一点的方法:Passing data between a fragment and its container activity

然后你最后Fragment你可以调用(与我前面提到的变量产生的吸气剂)添加到您的容器Activity这样的:

YourActivity yourActivity = ((YourActivity) getActivity()); 
int foo = yourActivity.getFooInt(); 
0

你可以找到片段在你的Activity中,并通过公共方法从每个片段获取数据。变量position是您的视图中的片段位置

public Fragment getFragment(ViewPager container, int position) { 
String name = makeFragmentName(container.getId(), position); 
return mFragmentManager.findFragmentByTag(name); 
} 

private static String makeFragmentName(int viewId, int index) { 
    return "android:switcher:" + viewId + ":" + index; 
}