简体   繁体   English

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

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

I have a fragment with a ViewPager ( fragment_main ) inside my MainActivity . 我的MainActivity有一个带有ViewPagerfragment_main )的fragment_main On my MainActivity I have a BottomNavigationView . 在我的MainActivity我有一个BottomNavigationView I want to set the fragment_main 's ViewPager ' page when I click the items of BottomNavigationView . 单击BottomNavigationView的项目时,我想设置fragment_mainViewPager页面。 how can I do that? 我怎样才能做到这一点?

PS: I already made it work but I don't think I used a good way.I got a refrence to my ViewPager inside my fragment and I set the Item: 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;
            }
        }

It works! 有用! But the problem is: what if I have another fragment on my MainActivity ? 但是问题是:如果我的MainActivity上还有另一个片段怎么办? Sure, I can replace it with fragment_main first but it takes time and mainFragment =(MainFragment)getSupportFragmentManager().findFragmentById(R.id.main_frame) returns null. 当然,我可以先用fragment_main替​​换它,但要花些时间,并且mainFragment =(MainFragment)getSupportFragmentManager().findFragmentById(R.id.main_frame)返回null。

So whats the best way to set fragment's viewpager's page, Inside parent activity? 那么,设置片段的viewpager页面,在父活动内部的最佳方法是什么?

Use FrameLayout instead of ViewPager for Fragments 使用FrameLayout代替ViewPager生成片段

Use below line in your case statement inside bottomNavigationView click listener. 在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);
}

here R.id.conent is FrameLayout id 这里R.id.conent是FrameLayout ID

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

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