从Activity设置子片段的ViewPager页面

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了从Activity设置子片段的ViewPager页面相关的知识,希望对你有一定的参考价值。

我的ViewPager里面有一个fragment_mainMainActivity)片段。在我的MainActivity我有一个BottomNavigationView。当我点击fragment_main的项目时,我想设置ViewPagerBottomNavigationView页面。我怎样才能做到这一点?

PS:我已经让它工作但是我认为我没用过一个好方法。我对我的片段中的ViewPager有所了解并设置了Item:

 bottomNavigationView.setOnNavigationItemSelectedListener(new BottomNavigationView.OnNavigationItemSelectedListener() {
        @Override
        public boolean onNavigationItemSelected(@NonNull MenuItem item) {
            MainFragment mainFragment = null;
            switch (item.getItemId()){
                case R.id.nav_item_feed:
                    mainFragment =(MainFragment)getSupportFragmentManager().findFragmentById(R.id.main_frame);
                    mainFragment.viewPager.setCurrentItem(0);
                    break;
            }
        }

有用!但问题是:如果我在MainActivity上有另一个片段怎么办?当然,我可以先用fragment_main替​​换它,但需要时间并且mainFragment =(MainFragment)getSupportFragmentManager().findFragmentById(R.id.main_frame)返回null。

那么最好的方法是设置片段viewpager页面,内部父活动?

答案

使用FrameLayout而不是ViewPager for Fragments

在bottomNavigationView单击侦听器中的case语句中使用以下行。

toFrag(ProductsFrag.newInstance(FragInstance.PRODUCTS));

    public void toFrag(Fragment toFrag){
    new Handler().postDelayed(new Runnable() {
                        @Override
                        public void run() {
                            getSupportFragmentManager().beginTransaction().replace(R.id.content, toFrag).commitAllowingStateLoss();
                        }
                    }, 200);
}

这里R.id.content是FrameLayout id

以上是关于从Activity设置子片段的ViewPager页面的主要内容,如果未能解决你的问题,请参考以下文章

是否可以在片段类中设置 ViewPager?

FragmentStatePagerAdapter 内存泄漏(带有 viewpager 的嵌套片段)

响应Activity中的ViewPager2 Fragments事件

如何共享元素从片段到活动的过渡

<activity> windowSoftInoutMode 不适用于 ViewPager 中的片段

Viewpager 不清除片段