代码之家  ›  专栏  ›  技术社区  ›  Pier Giorgio Misley

FragmentStatePageRadapter在当前选项卡之前添加选项卡而不刷新

  •  0
  • Pier Giorgio Misley  · 技术社区  · 6 年前

    我知道里面有些问题,但没人帮我。

    这是我的处境:

    • 我有一张N个动态标签的列表。
    • 其中一个选项卡(称之为“活动”)有一个包含一些true-false项的列表视图。
    • 更改certains items的值,将在当前选项卡之前添加或删除选项卡(称为“detail”)。

    要解释这种情况:

    启动情况

    制表符(粗体为当前选定的制表符)

    家庭-细节-客户-工厂- 活动 -一些东西

    • 在“活动”选项卡中,我更改了此复选框的选中值,这就是我希望成为的新情况:

    家庭-客户-工厂- 活动 -一些东西

    这就是我得到的:

    我只有两个ESIT:


    一: 一些东西 选定的选项卡标题和 活动 显示的内容

    二: 活动 选定的选项卡标题和 一些东西 显示的内容

    我想要的是添加删除显示 活动 选择制表符n和 活动 显示内容。

    经过长时间的介绍,这是我的代码:

    碎片状态页

    private class PagerAdapter extends FragmentStatePagerAdapter {
        private int mNumOfTabs;
        private SparseArray<MyFragmentsInterface> activeFragments;
        private ArrayList<MyHeaderEnum> titles;
    
        MyFragmentsInterface getNewMeterFragmentIfAvailable(int position) {
            try {
                return activeFragments.get(position);
            } catch (Exception ex) {
                return null;
            }
        }
    
        PagerAdapter(FragmentManager fm, int NumOfTabs, ArrayList<MyHeaderEnum> titles) {
            super(fm);
            this.activeFragments = new SparseArray<>();
            this.mNumOfTabs = NumOfTabs;
            this.titles = titles;
        }
    
    
        @Override
        public int getItemPosition(@NonNull Object object) {
            //I played a lot with this part to manage the addiction-removal of tabs before current, but without succeed
            return super.getItemPosition(object);
        }
    
        void removetitle(int position) {
            if (position != -1 && position < titles.size()) {
                titles.remove(position);
                mNumOfTabs--;
                notifyDataSetChanged();
            }
        }
    
        void addTitle(int position, MyHeaderEnum title) {
            titles.add(position, title);
            mNumOfTabs++;
            notifyDataSetChanged();
        }
    
        @Override
        public int getCount() {
            return mNumOfTabs;
        }
    
        @Override
        public void destroyItem(ViewGroup container, int position, Object object) {
            if (openedIntervention.isInPlace()) {
                activeFragments.get(position).save(false);
            }
            activeFragments.remove(position);
    
            super.destroyItem(container, position, object);
        }
    
        @Override
        public Fragment getItem(int position) {
            MyHeaderEnum currentTitle = titles.get(position);
    
            Bundle bundle = new Bundle();
            bundle.putString(_intervention_id_key, interventionID);
    
            currentFragment = newFragment;
    
            //this is to retrieve the correct content for the header
            switch (currentTitle) {
                case DETTAGLIO:
                    InterventoDettaglioFragment interventoDettaglioFragment = new InterventoDettaglioFragment();
                    interventoDettaglioFragment.setArguments(bundle);
                    newFragment = interventoDettaglioFragment;
                    return interventoDettaglioFragment;
                    //... and so on
            }
            return null;
        }
    
        @NonNull
        @Override
        public Object instantiateItem(ViewGroup container, int position) {
            MyFragmentsInterface fragment = (MyFragmentsInterface) super.instantiateItem(container, position);
    
            activeFragments.put(position, fragment);
    
            return fragment;
        }
    
        @Override
        public CharSequence getPageTitle(int position) {
            return titles.get(position).getValue();
        }
    }
    

    方法(在活动中)添加/删除选项卡:

    public void manageTabBefore() {
        //pre-code to decide if it has to be added or not
    
        if (hasToBeAdded) {
            isTabAdded = true;
            adapter.addTitle(podTabIndex, MyHeaderEnum.POD);
        } else if (hasToBeRemoved) {
            isTabAdded = false;
            adapter.removetitle(podTabIndex);
        }
    }
    

    所选更改的选项卡布局

        tabLayout.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() 
        {
            @Override
            public void onTabSelected(TabLayout.Tab tab) {
                //I also played a looooot with this
                int position = tab.getPosition();
                viewPager.setCurrentItem(position);
            }
    
            @Override
            public void onTabUnselected(TabLayout.Tab tab) {
            }
    
            @Override
            public void onTabReselected(TabLayout.Tab tab) {
            }
        });
    

    我快要放弃了,我该怎么做才能在 不刷新当前选项卡 不更改所选选项卡 是吗?

    0 回复  |  直到 6 年前