我有五个Fragments
附加到ViewPager
。我想在将数据发送到服务器之前验证每个表单中的表单。所以,我决定遍历Fragments
以查看我是否可以访问这些方法。但是,我知道无法达到这样的目标。以下是我试过的内容
Fragment[] listOfFrags = {new Frag1(), new Frag2(), new Frag3(), new Frag4(),
new ExpenseFragment()};
for (int i = 0; i < listOfFrags.length; i++) {
Fragment cuurentFrag = listOfFrags[i];
boolean checker = cuurentFrag.ValidateData();<-- The unreachable destination
}
这是我的Adapter
public PagersAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int position) {
Fragment fragment = new Frag1();
switch (position) {
case 0:
fragment = new Frag1();
break;
case 1:
fragment = new Frag2();
break;
case 2:
fragment = new Frag3();
break;
case 3:
fragment = new Frag4();
break;
case 4:
fragment = new Frag5();
}
return fragment;
}
@Override
public int getCount() {
return 5;
}
答案 0 :(得分:1)
我猜你的意思是调用每个片段的ValidateData()
方法。您可以编写一个包含Fragment
方法的扩展ValidateData()
的超类,并使所有其他片段扩展超类。如果要调用ValidateData()
方法,只需将片段转换为超类。我想你的代码中还有一些其他问题。
答案 1 :(得分:0)
您可以使用适配器存储其碎片列表,如下面的示例所示。
private class SectionsPagerAdapter extends FragmentPagerAdapter {
SparseArray<Fragment> registeredFragments = new SparseArray<Fragment>();
public SectionsPagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int position) {
Fragment fragment = null;
switch (position) {
case 0:
fragment = new Fragment0;
break;
case 1:
fragment = new Fragment1;
break;
case 2:
fragment = new Fragment2;
break;
}
return fragment;
}
@Override
public int getCount() {
return 3;
}
@Override
public Object instantiateItem(ViewGroup container, int position) {
Fragment fragment = (Fragment) super.instantiateItem(container, position);
registeredFragments.put(position, fragment);
return fragment;
}
public SparseArray<Fragment> getRegisteredFragments(){
return registeredFragments;
}
}
正如ProtossShuttle所说,您可以使用validate方法创建一个超类(或接口,具体取决于您的需要),您可以通过迭代此列表来调用每个Fragment。