如何在 一个Activity中跳转另一个Activity的fragment?

我利用fragment+ViewPager实现了底部导航栏功能,MainActivity布局是上面一个ViewPager,下面一个BottomNavigationView
我是参考https://blog.csdn.net/MrsZhang1995/article/details/111658786 做的底部导航栏
fragment是直接右击项目包-->New-->Fragment-->Fragment(Blank)创建的,四个fragment各有一个布局文件,所以我的fragment应该没有id。
现在我想从其他Activity点击按钮跳转MainActivity的第三个fragment,应该怎么写?
我的想法是跳转时给intent传一个int型值,0-3代表想跳转第0-3个fragment,但是不知道MainActivity怎么改
其他Activity设置跳转的代码:

Intent intent = new Intent(getBaseContext(), MainActivity.class);
intent.putExtra("id",3);
startActivity(intent);

MainActivity代码:不知道……处应该怎么写

public class MainActivity extends AppCompatActivity implements BottomNavigationView.OnNavigationItemSelectedListener, ViewPager.OnPageChangeListener {
    ViewPager viewPager;//用于展示不同的fragment
    BottomNavigationView bottomNavigationView;//底部导航栏
    HomeFragment homeFragment = new HomeFragment();//主界面
    CommunityFragment communityFragment = new CommunityFragment();//社区
    MallFragment mallFragment = new MallFragment();//商城
    MineFragment mineFragment = new MineFragment();//我的
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        init();//初始化界面
        int id = getIntent().getIntExtra("id",0);
        switch(id) {
            case 0://显示第0个fragment:HomeFragment
                …………
                break;
            case 1://显示第1个fragment: CommunityFragment
                …………
                break;
            case 2://显示第2个fragment:MallFragment
                …………
                break;
            case 3://显示第3个fragment:MineFragment
                …………
                break;
        }
    }
    private void init() {
        //获取页面标签对象
        viewPager = findViewById(R.id.viewPager);
        viewPager.setOnPageChangeListener(this);//添加页面切换监视器
        bottomNavigationView = findViewById(R.id.bottomNavigation);
        bottomNavigationView.setOnNavigationItemSelectedListener(this);//添加导航栏选择监视器
        viewPager.setAdapter(new FragmentPagerAdapter(getSupportFragmentManager()) {//给页面添加适配器
            @NonNull
            @Override
            public Fragment getItem(int position) {
                switch(position) {
                    case 0:return homeFragment;
                    case 1:return communityFragment;
                    case 2:return mallFragment;
                    case 3:return mineFragment;
                }
                return null;
            }
            @Override
            public int getCount() {//界面个数
                return 4;
            }
        });
    }
    @Override
    public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {    }
    @Override
    public void onPageSelected(int position) {
        bottomNavigationView.getMenu().getItem(position).setChecked(true);
    }
    @Override
    public void onPageScrollStateChanged(int state) {    }
    @Override
    public boolean onNavigationItemSelected(@NonNull MenuItem item) {
        viewPager.setCurrentItem(item.getOrder());
        return true;
    }
}

viewPager.setCurrentItem(position);

  • 你可以看下这个问题的回答https://ask.csdn.net/questions/208739
  • 除此之外, 这篇博客: Fragment+ViewPager+BottomNavigationView实现页面导航3中的 2.3 主界面Activity 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • FragmentViewPagerBottomNavigationActivity2.java

    public class FragmentViewPagerBottomNavigationActivity2 extends AppCompatActivity {
    
        private ViewPager mViewPager;
        private List<Fragment> mFragments;
        private MyViewPagerAdapterForFragment mMyViewPagerAdapter;
        private BottomNavigationView mBottomNavigationView;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_fragment_view_pager_bottom_navigation2);
    
            initView();
            initData();
            initEvent();
    
        }
    
        private void initView() {
            mViewPager = findViewById(R.id.vp);
            mBottomNavigationView = findViewById(R.id.bnv);
        }
    
        private void initData() {
            mFragments = new ArrayList<>();
            // 承载多个栏目的主Fragment,把它单独用一个Fragment类来写,下文会对HomeFragment详述
            mFragments.add(new HomeFragment());
    		// 这里是剩余两页:发现页面、我的页面
            for (int i = 1; i < 3; i++) {
                ExampleFragment fragment = ExampleFragment.newInstance("fragment" + i, "");
                mFragments.add(fragment);
            }
        }
    
        private void initEvent() {
    
            mMyViewPagerAdapter = new MyViewPagerAdapterForFragment(getSupportFragmentManager(), mFragments);
            mViewPager.setAdapter(mMyViewPagerAdapter);
            mViewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
                @Override
                public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
    
                }
    
                @Override
                public void onPageSelected(int position) {
                    onPagerSelected(position);
                    Toast.makeText(FragmentViewPagerBottomNavigationActivity2.this, "当前第" + position + "页", Toast.LENGTH_SHORT).show();
                }
    
                @Override
                public void onPageScrollStateChanged(int state) {
    
                }
            });
    
            mBottomNavigationView.setOnItemSelectedListener(new NavigationBarView.OnItemSelectedListener() {
                @Override
                public boolean onNavigationItemSelected(@NonNull MenuItem item) {
    
                    switch (item.getItemId()) {
                        case R.id.menu_home:
                            mViewPager.setCurrentItem(0);
                            return true;
                        case R.id.menu_find:
                            mViewPager.setCurrentItem(1);
                            return true;
                        case R.id.menu_mine:
                            mViewPager.setCurrentItem(2);
                            return true;
                    }
                    return false;
                }
            });
            mBottomNavigationView.setSelectedItemId(R.id.menu_home);
    
        }
    
        private void onPagerSelected(int position) {
            switch (position) {
                case 0:
                    mBottomNavigationView.setSelectedItemId(R.id.menu_home);
                    break;
                case 1:
                    mBottomNavigationView.setSelectedItemId(R.id.menu_find);
                    break;
                case 2:
                    mBottomNavigationView.setSelectedItemId(R.id.menu_mine);
                    break;
            }
        }
    }
    

    与上节不同的点就是添加Fragment数据的部分。本节我们想要对首页的Fragment里面再添加多个子Fragment,因此就不能用ExampleFragment这个仅展示一个文本的Fragment了。我们的首页Fragment里面需要有多个页面切换,以及标题,需要新的布局,新的代码。接下来我们为它新建一个HomeFragment来具体实现。而另外两个页面Find和Mine,我们还用ExampleFragment做个简单模拟显示下文本就行了。

重写MainActivity的OnResume方法,在其中监听其他activity传递过来的Intent中"id"的值进行跳转等,记得判断是否存在这个值,不要直接用以免引起空指针异常

从上页面带过来一个值 对应viewpager的index