从一个片段移动到另一个片段时如何自动选择底部导航?

Posted

技术标签:

【中文标题】从一个片段移动到另一个片段时如何自动选择底部导航?【英文标题】:How to make bottom navigation selected automatically when moving from one fragment to another? 【发布时间】:2022-01-06 18:56:32 【问题描述】:

我正在尝试制作操作按钮以从主页片段移动到促销片段。

在片段主页中,有一个操作按钮将移动到促销片段。但是,当点击主页片段上的促销动作按钮时,显示将移动到促销片段,但在主页片段中仍然选择底部导航。

Screenshot Home Fragment

Screenshot Promo Fragment

这是我在 Home Fragment 中的操作按钮代码:

        imagePromo.setOnClickListener(new View.OnClickListener() 
        @Override
        public void onClick(View v) 
            ((MainActivity)getActivity()).selectFragment(2);
        
    );

这是我在 MainActivity 中的 selectfragment 代码:

    public void selectFragment(int position)
    viewPager.setCurrentItem(position, true);
    viewPager.dispatchSetSelected(true);

这是我在 MainActivity 中的底部导航代码:

    @Override
protected void onCreate(Bundle savedInstanceState) 
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    view = findViewById(android.R.id.content);
    viewPager = findViewById(R.id.viewpager);
    viewPager.setAdapter(new MyAdapter(getSupportFragmentManager()));
    viewPager.setOffscreenPageLimit(pager_number);
    navigation = findViewById(R.id.navigation);
    navigation.setOnNavigationItemSelectedListener(item -> 
        switch (item.getItemId()) 
            case R.id.navigation_home:
                viewPager.setCurrentItem(0);
                return true;
            case R.id.navigation_category:
                viewPager.setCurrentItem(1);
                return true;
            case R.id.navigation_promo:
                viewPager.setCurrentItem(2);
                return true;
            case R.id.navigation_wishlist:
                viewPager.setCurrentItem(3);
                return true;
        
        return false;
    );

【问题讨论】:

【参考方案1】:

我正在尝试使用我在 github 上找到的代码。下面是代码sn-p:

        viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() 
        @Override
        public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) 
        
        @Override
        public void onPageSelected(int position) 
            if (prevMenuItem != null) 
                prevMenuItem.setChecked(false);
             else 
                navigation.getMenu().getItem(0).setChecked(false);
            
            navigation.getMenu().getItem(position).setChecked(true);
            prevMenuItem = navigation.getMenu().getItem(position);
        

        @Override
        public void onPageScrollStateChanged(int state) 

        
    );

我尝试在 MainActivity 中应用它,它解决了我上面的问题。

【讨论】:

【参考方案2】:

您可以在您的setOnClickListener 中设置它来更改ViewPagerFragment 并且它是CurrentItem 来更改图标。

   Button to_promo = view.findViewById(R.id.to_promo);
        to_promo.setOnClickListener(view1 -> 
            viewPager.setCurrentItem(2);
        );

【讨论】:

以上是关于从一个片段移动到另一个片段时如何自动选择底部导航?的主要内容,如果未能解决你的问题,请参考以下文章

在底部导航栏中保存片段状态

想要使用片段从导航抽屉活动移动到另一个屏幕,以在所有屏幕上显示抽屉

将数据从一个片段发送到另一个片段时出错。 (两个片段都由一个活动托管)

导航抽屉活动:在按钮单击时从片段移动到片段

在导航到下一个片段时在底部导航视图中打开警报对话框

底部导航 如何从片段内部更改片段