android - 在ViewPager中将containerViewId中的Fragment添加到Fragment中

时间:2014-03-26 10:03:32

标签: android android-layout android-fragments android-viewpager

我遇到了以下问题:

MainActivity主要是ViewPager我可以在卡片中滑动(Fragment)。此卡具有占位符ViewGroup,其中在运行时期间放置了另一个内容(Fragment)。问题是内容只放在一张卡片中。

MainActivity

public class MainActivity extend FragmentActivity {

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        // ...
        // init ViewPager
        getViewPager().setAdapter(new CardSelectionAdapter(getSupportFragmentManager()));
    }

    // ...

    private class CardSelectionAdapter extends FragmentPagerAdapter {
        // ...

        public Fragment getItem(int position) {
            return new CardFragment(someData);
        }
    }
}

CardFragment

public class CardFragment extends Fragment {

     public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        ViewGroup rootView = (ViewGroup) inflater.inflate(R.layout.card, container, false);
        rootView.findViewById(R.id.actionSheet).setVisibility(View.GONE);
        return rootView;
    }

    public void populate() {
        // ...

        Fragment f;
        switch (type) {
            case TYPE_A: f = new ActionsAFragment(); break;
            case TYPE_B: f = new ActionsBFragment(); break;
            default: f = null;
        }

        if (f != null) {
            // Here should be the main problem when adding Fragment to container/placeholder
            getFragmentManager().beginTransaction().add(R.id.actionSheet, f).commit();
            getView().findViewById(R.id.actionSheet).setVisibility(View.VISIBLE);

        }
    }
}

我认为因为所有卡都属于MainActivityFragmentTransaction只能添加ViewGroup id R.id.actionSheet

我是否有另外一种方法可以使用相同的ID向布局添加内容?

1 个答案:

答案 0 :(得分:1)

我不知道你在哪里打populate。您应该更改populate以接受父视图(而不是每次都将片段添加到R.id.actionsheet)并从onCreateView调用它并将其传递给您刚刚创建的视图。这样,您就可以在具有相同ID的actionSheet中查看多个视图。但是,缺少很多代码,我无法确定该怎么做。

顺便说一句,当您处理嵌套片段时 - 在populate内部,您应该使用getChildFragmentManager()而不是getFragmentManager()