Удалить и добавить страницу в FragmentPagerAdapter

Я использую адаптер фрагментного пейджера с 5 страницами. и я настраиваю адаптер для просмотра пейджера, как показано ниже

 public class xxx extends FragmentPagerAdapter
    {
        final int PAGE_COUNT_LOGGED_IN = 6;
        final int PAGE_COUNT_LOGGED_OUT = 2;
        TextView oTextView = null;
        LayoutInflater inflater = null;
        PagerTabStrip m_oPageTabStrip = null;
        String m_strTab = null;
        String[] m_strArray = null;     
        Context m_oContext = null;

        /** Constructor of the class */
        public xxxx (Context context, android.support.v4.app.FragmentManager oFragmentManager) 
        {
            super (oFragmentManager);
            m_oContext = context;
        }

        /** This method will be invoked when a page is requested to create */
        @Override
        public Fragment getItem(int arg0) 
        {       
            xxxxFragment myFragment = new xxxFragment ();
            Bundle data = new Bundle();
            data.putInt("current_page", arg0+1);
            myFragment.setArguments(data);
            return myFragment;
        }

        /** Returns the number of pages */
        @Override
        public int getCount() 
        {       
            if (Utility.m_bIsLoggedIn == true)
            {
                return PAGE_COUNT_LOGGED_IN;
            }
            else
            {
                return PAGE_COUNT_LOGGED_OUT;
            }
        }

        @Override
        public CharSequence getPageTitle(int position) 
        {
            String strText = " ";

            switch(position)
            {
            case 0:
                strText = getBaseContext().getString(R.string.ccc);
                break;
            case 1:
                strText = getBaseContext().getString(R.string.bbb);
                break;
            case 2:
                strText = getBaseContext().getString(R.string.bbb);
                break;
            case 3:
                strText = getBaseContext().getString(R.string.bbb);
                break;
            case 4:
                strText = getBaseContext().getString(R.string.bbb);
                break;
            case 5:
                strText = getBaseContext().getString(R.string.Sbbb);
                break;
            }

        }

и во фрагменте я создаю линейный макет индивидуально для каждой страницы, как показано ниже

bbb.m_oSharedPage = (LinearLayout) LayoutInflater.from(Utility.m_oService).inflate(R.layout.viewpage, null);
                            iView = Utility._YOURS_SHARED;
                            oCurrentPage = .m_oSharedPage;

и я устанавливаю адаптер, как показано ниже

m_oPager.setAdapter(m_oPagerAdapter);

мой вопрос в том, как я могу динамически добавлять и удалять 5-ю страницу... например, в некоторых случаях мне нужна страница 5, а в некоторых случаях мне нужно удалить страницу 5.


person user1340801    schedule 04.04.2013    source источник


Ответы (1)


У меня есть кое-что, что может помочь, я не меняю Fragment, просто удаляю и добавляю обратно. Это изменится только с последней позиции. Другими словами, если у вас было пять Fragments и вы хотели удалить третьего, то это не сработает. Я не уверен, что это лучшее решение, но вот что я сделал:

mSectionsPagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager());

Затем в качестве примера я использую метод добавления и удаления click:

public void remove(View v) {
    // Change the count to whatever you would like
    mSectionsPagerAdapter.setCount(1);
    // Triggers a redraw of the PageAdapter
    mSectionsPagerAdapter.notifyDataSetChanged();
}

public void add(View v) {
    // Change the count back to the initial count
    mSectionsPagerAdapter.setCount(2);
    // Triggers a redraw of the PageAdapter
    mSectionsPagerAdapter.notifyDataSetChanged();
}

Я добавил метод setCount() к моему SectionsPagerAdapter:

public void setCount(int count) {
    this._count = count;
}

Изменено getCount() на и добавлен счетчик по умолчанию:

private int _count = 2;

@Override
public int getCount() {
    return this._count;
}

Вот мой полный SectionsPagerAdapter:

public class SectionsPagerAdapter extends FragmentPagerAdapter {
    private int _count = 2;

    public SectionsPagerAdapter(FragmentManager fm) {
        super(fm);
    }

    @Override
    public Object instantiateItem(ViewGroup container, int position) {
        return super.instantiateItem(container, position);
    }

    @Override
    public Fragment getItem(int position) {
        switch (position) {
        case 0:
            return new FragmentOne();
        case 1:
            return new FragmentTwo();
        default:
            return null;
        }
    }

    public void setCount(int count) {
        this._count = count;
    }

    @Override
    public int getCount() {
        return this._count;
    }

    @Override
    public CharSequence getPageTitle(int position) {
        switch (position) {
        case 0:
            return getString(R.string.fragment_title_one).toUpperCase(Locale.ENGLISH);
        case 1:
            return getString(R.string.fragment_title_two).toUpperCase(Locale.ENGLISH);
        }
        return null;
    }
}
person jnthnjns    schedule 04.04.2013
comment
привет...спасибо за ответ...но я пробовал..проблема в том..когда счетчик изменяется и вызывается адаптер notfy, страница не воспроизводится, но содержимое страницы отображается, когда я прокручиваю настоящее последняя страница... так как у adpater есть последняя страница, созданная в начале - person user1340801; 08.04.2013
comment
Странно, я не получаю такой же реакции, я не могу прокрутить страницу, которую я удалил. - person jnthnjns; 08.04.2013
comment
нет, вы не можете прокручивать, но когда вы удлиняете прокрутку, вы можете увидеть содержимое этой страницы ... вы не увидите заголовок и все, кроме содержимого. - person user1340801; 09.04.2013
comment
Ваша проблема - stackoverflow.com/ вопросы/9061325/ - person zella; 01.04.2014