android - 动态添加页面到 Fragment Page Adapter

标签 android android-fragments

我是 Android 的新手,正在使用 FragmentPageAdapter,当像下面这样使用时它工作得很好

 public Fragment getItem(int position) {

        if (position == 0) {
                MenuItemFragment frag = new MenuItemFragment();
                Bundle bundle = new Bundle();
                bundle.putInt("pos", position);
                frag.setArguments(bundle);
                return frag;
            } else if (position == 1) {
                MenuItemFragment1 frag = new MenuItemFragment1();
                Bundle bundle = new Bundle();
                bundle.putInt("pos", position);
                frag.setArguments(bundle);
                return frag;
            } else if (position == 2) {
                MenuItemFragment2 frag = new MenuItemFragment2();
                Bundle bundle = new Bundle();
                bundle.putInt("pos", position);
                frag.setArguments(bundle);
                return frag;
            }
            return null;
        }    

所以在上面的代码中我需要为相应的位置膨胀MenuItemFragment。

我的问题是:是否可以根据某些条件动态添加 fragment 。在这里,我所有的 fragment 都具有相同的布局,但每个 fragment 的数据都会发生变化。

我为上面的代码做了什么来动态返回 fragment 。如下。

public Fragment getItem(int position) {
    if (SubMenuActivity.sMenuCategory.size() > 0) {
        SubMenuActivity.sMenuCategory.clear();
    }

    MenuItemFragment frag = new MenuItemFragment();
    try {
        for (int j = 0; j < SubMenuActivity.sMenuCard.size(); j++) {
            String category = SubMenuActivity.sMenuCard.get(j).mCategory;
            String header = SubMenuActivity.sMenuFragHeader[position];

            if (category.equalsIgnoreCase(header)) {
                SubMenuActivity.sMenuCategory.add(SubMenuActivity.sMenuCard
                        .get(j));
            }
        }
    } catch (Exception e) {
        e.printStackTrace();
    }

    return frag;

}

这里的问题是,对于每个位置,我都将数据添加到 sMenuCategory。但是这里 getItem(position) 第一次循环两次并清除位置为零时添加的数据,并保留位置为一时添加的数据并为前两个 fragment 显示相同的数据。

请帮我解决这个问题。清除每个位置的 arrayList,以便按照不重复的列表包含数据。

最佳答案

在您的寻呼机适配器中保留 fragment 数组并动态更新它:

private ArrayList<Fragment> fragments = new ArrayList<Fragment>();

        public <constructor>() {
            MenuItemFragment frag = new MenuItemFragment();
            Bundle bundle = new Bundle();
            bundle.putInt("pos", 0);
            frag.setArguments(bundle);
            fragments.add(frag);
            MenuItemFragment1 frag1 = new MenuItemFragment1();
            Bundle bundle1 = new Bundle();
            bundle.putInt("pos", 1);
            frag1.setArguments(bundle1);
            fragments.add(frag1);
            MenuItemFragment2 frag2 = new MenuItemFragment2();
            Bundle bundle2 = new Bundle();
            bundle.putInt("pos", 2);
            frag2.setArguments(bundle2);
            fragments.add(frag2);
        }

        @Override
        public Fragment getItem(int position) {
            // TODO Auto-generated method stub
            return fragments.get(position);
        }

        @Override
        public int getCount() {
            return fragments.size();
        }

        public void addFragment(Fragment fragment) {
            fragments.add(fragment);
        }

要添加新 fragment 只需调用:

adapter.add(<fragment>);
adapter.notifyDataSetChanged();

关于android - 动态添加页面到 Fragment Page Adapter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21234647/

相关文章:

java - ActionBar 选项卡和 ViewPager 的多 fragment 布局

java - 如何在Fragment上实现这些Activity代码呢?

android - 从单例绑定(bind)服务

android - Android 的 'Vertical Bias' 中的 'Horizontal Bias' 或 'ConstraintLayout' 用于什么?

java - 类型不匹配无法将主 Activity 转换为 fragment

android - 使 Sliding TabLayout 中的标签不滑动

android - 在表格中输入多行的最简单方法

php - Android - 403 禁止提交表单

java - fragment 应该是独立的吗?

android - 旋转设备后从 DialogFragment 接收回调时 fragment 未附加到 Activity