FragmentPagerAdapter被弃用后的代替方案

网上搜了很多,都没有找到有关Java的完整解决方案。到处问也没有结果。自己瞎折腾,居然出结果啦!——不是科班出生小白太难了!

首先说,我要想的效果:底部一个导航栏,点击导航栏,可以实现翻页效果。也可以通过左滑、右滑实现翻页效果。

第一步:在gradle里添加支持:

implementation 'androidx.viewpager2:viewpager2:1.0.0'

第二步:MainActivity的XML里



    

    

    

第三步,color写法,在res里新建一个文件夹,取名color,下面再建一个资源文件bg_tab.xml


    
    

第四步:menu写法,新建下menu文件夹,取名navigation.xml。——icon就随便来了。


    
    

第五步,新建两个碎片,blankFragment,blankFragment2。

第六步,新建一个Java,取名ViewPager2Adapter。

public class ViewPager2Adapter extends FragmentStateAdapter {
    BlankFragment blankFragment = new BlankFragment();
    BlankFragment2 blankFragment2 = new BlankFragment2();

    public ViewPager2Adapter(@NonNull FragmentActivity fragmentActivity) {
        super(fragmentActivity);
    }

    public int getItemCount() {
        return 2;
    }

    @NonNull
    public Fragment createFragment(int position) {
        switch (position) {
            case 0:
                return blankFragment;
            case 1:
                return blankFragment2;
        }
        return null;
    }
}

第七步,MainActivity写法:

public class MainActivity extends AppCompatActivity {
    ViewPager2 viewPager2;
    NavigationBarView mNavigationView;
    MenuItem menuItem;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        init();
    }

    private void init() {
        ViewPager2Adapter adapter = new ViewPager2Adapter(this);
        viewPager2 = findViewById(R.id.ViewPager2);
        mNavigationView = findViewById(R.id.navigation);
        mNavigationView.setOnItemSelectedListener(mOnItemSelectedListener);
        viewPager2.registerOnPageChangeCallback(new ViewPager2.OnPageChangeCallback() {
            @Override
            public void onPageSelected(int p) {
                menuItem = mNavigationView.getMenu().getItem(p);
                menuItem.setChecked(true);
            }
        });
        viewPager2.setAdapter(adapter);
    }

    private final NavigationBarView.OnItemSelectedListener mOnItemSelectedListener
            = new NavigationBarView.OnItemSelectedListener() {
        @Override
        public boolean onNavigationItemSelected(@NonNull MenuItem item) {
             menuItem = item;
             if (item.getItemId() == R.id.home) {
                viewPager2.setCurrentItem(0);
                return true;
            } else if (item.getItemId() == R.id.se) {
                viewPager2.setCurrentItem(1);
                return true;
            }
            return false;
        }
    };
}

写在最后:

实现多个Fragment滑动翻页,或者通过底部导航栏翻页。并实现Fragment与Fragment之前传值,和Fragment与宿主Activity之间传值。并且解决了viewPager2内存泄漏的问题;提供了FrameLayout布局中控件居中的方案。请移步下载:

https://download.csdn.net/download/u011501017/87693049

你可能感兴趣的:(android,java,开发语言,android,studio)