繁体   English   中英

从活动设置子片段的ViewPager页面

[英]Set child fragment's ViewPager page from Activity

我的MainActivity有一个带有ViewPagerfragment_main )的fragment_main 在我的MainActivity我有一个BottomNavigationView 单击BottomNavigationView的项目时,我想设置fragment_mainViewPager页面。 我怎样才能做到这一点?

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生成片段

在bottomNavigationView click侦听器内的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.conent是FrameLayout ID

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM