调用方法在父活动的片段中

时间:2015-08-30 15:02:54

标签: android android-fragments

我有五个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;
}

2 个答案:

答案 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。