简体   繁体   中英

Set child fragment's ViewPager page from Activity

I have a fragment with a ViewPager ( fragment_main ) inside my MainActivity . On my MainActivity I have a BottomNavigationView . I want to set the fragment_main 's ViewPager ' page when I click the items of BottomNavigationView . 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:

 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 ? Sure, I can replace it with fragment_main first but it takes time and mainFragment =(MainFragment)getSupportFragmentManager().findFragmentById(R.id.main_frame) returns null.

So whats the best way to set fragment's viewpager's page, Inside parent activity?

Use FrameLayout instead of ViewPager for Fragments

Use below line in your case statement inside bottomNavigationView click listener.

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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