【问题标题】:Remove and add page to FragmentPagerAdapter删除页面并将页面添加到 FragmentPagerAdapter
【发布时间】:2013-04-04 23:18:10
【问题描述】:

我正在使用一个有 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 页。

【问题讨论】:

    标签: android android-fragments android-viewpager adapter fragmentpageradapter


    【解决方案1】:

    我有一些可能会有所帮助的东西,我不会更改 Fragment,只是将其删除并重新添加。这只会从最后一个位置改变。换句话说,如果您有 5 个 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();
    }
    

    我在SectionsPagerAdapter 中添加了一个setCount() 方法:

    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;
        }
    }
    

    【讨论】:

    • 嗨...谢谢您的回答...但我已经尝试过了...问题是...当我滚动当前的最后一页时显示页面...因为 adpater 在开始时创建了最后一页
    • 这很奇怪,我没有得到同样的反应,我无法滚动到我已删除的页面。
    • 不,您不能滚动,但是当您拉长滚动条时,您可以看到该页面的内容...您不会看到标题,而只会看到内容
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-27
    • 2014-03-02
    相关资源
    最近更新 更多