ViewPager動態(tài)替換Fragment

最近遇到一個需求,主頁采用ViewPager+Fragment的主頁。用戶在設置中可以動態(tài)修改ViewPager的Fragment。原本以為只是動態(tài)修改數(shù)據(jù)源,然后調(diào)用notifyDataSetChanged()就可以了。然鵝并不是這樣。

簡單記錄一下最后的解決方案:

初始化數(shù)據(jù)的時候,創(chuàng)建所有可能會出現(xiàn)的Fragment

        walletFragment = new WalletFragment();
        washFragment = new WashFragment();
        userFragment = new UserFragment();
        partnerFragment = new PartnerFragment();

        fragments.add(walletFragment);
        fragments.add(washFragment);
        if (currentUser == AppConstant.user) {
            fragments.add(userFragment);
        } else {
            fragments.add(partnerFragment);
        }

        vpMain.setOffscreenPageLimit(3);
        mainPagerAdapter = new MainPagerAdapter(getSupportFragmentManager(), fragments);
        vpMain.setAdapter(mainPagerAdapter);
        tabMain.setCurrentTab(1);
        vpMain.setCurrentItem(1, false);

主要在Adapter中處理

public class MainPagerAdapter extends FragmentPagerAdapter {

    private ArrayList<Fragment> fragments;

    public MainPagerAdapter(FragmentManager fm, ArrayList<Fragment> fragments) {
        super(fm);
        this.fragments = fragments;
    }

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

    @Override
    public Fragment getItem(int position) {
        return fragments.get(position);
    }


    @Override
    public long getItemId(int position) {
        return fragments.get(position).hashCode();

    }

    @Override
    public int getItemPosition(Object object) {
        return POSITION_NONE;
    }
}

重點是這兩個方法 getItemId()getItemPosition() 通過這兩個方法來解決adapger的緩存問題。

最后在切換的時候調(diào)用

    private void switchUser(int eventIntData) {
        
        if (eventIntData == AppConstant.user) {
            //刪除商戶 添加用戶
            if (fragments.contains(partnerFragment)) {
                fragments.remove(partnerFragment);
                fragments.add(2, userFragment);
            }


        } else if (eventIntData == AppConstant.partner) {
            //刪除用戶 添加商戶
            if (fragments.contains(userFragment)) {
                fragments.remove(userFragment);
                fragments.add(2, partnerFragment);
            }
        }

        mainPagerAdapter.notifyDataSetChanged();
    }

?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容