【问题标题】:After switching from first fragment to second fragment, the bottom tab icon still shows first icon从第一个片段切换到第二个片段后,底部标签图标仍然显示第一个图标
【发布时间】:2017-06-12 11:47:20
【问题描述】:

当用户选择了一个联系人时,我正在从第一个片段切换到第二个片段。我的应用切换到第二个片段,但选项卡图标仍将第一个片段显示为选中状态。

这是我用来切换到第二个片段的代码。

Fragment fragment = new ItemSecondFragment();getActivity().getSupportFragmentManager().beginTransaction().replace(R.id.content_frame, fragment).addToBackStack(null).commit();

R.id.content_frame 是我的框架布局。

如何解决上述问题?

【问题讨论】:

  • 请出示您的完整代码..with xml
  • TabLayout.Tab tab = tabLayout.getTabAt(someIndex); tab.select();
  • 点击此链接至stackoverflow
  • 欢迎来到 Stack Overflow!如果您希望获得进一步的帮助或帮助解决您的问题,您可能需要添加 xml 和更多代码。我重新格式化并修复了语法以更好地用英语表达。

标签: android android-fragments android-fragmentactivity bottomnavigationview


【解决方案1】:

我使用下面的代码来设置一个fragment切换到另一个fragment时的tab图标

BottomNavigationView bottomNavigationView = (BottomNavigationView) findViewById(R.id.navigation);


View view = bottomNavigationView.findViewById(R.id.tab_calls);
view.performClick();

其中 R.id.tab_calls 是我的第二个片段。

【讨论】:

    【解决方案2】:

    在您的活动中将底部标签栏设为公共静态,并通过底部栏切换器转到第二个片段,例如 @Override

    public static BottomBar mBottomBar;
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    

    }

    在你的片段中

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        MainActivity.mBottomBar.selectTabAtPosition(2);
    

    }

    【讨论】:

    • 但我使用的是底部导航栏。
    • 如果是BottomNavigationView setSelectedItemId(int itemId)试试这个
    【解决方案3】:

    试试这个代码。

    private BottomNavigationView.OnNavigationItemSelectedListener mOnNavigationItemSelectedListener
                = new BottomNavigationView.OnNavigationItemSelectedListener() {
    
            @Override
            public boolean onNavigationItemSelected(@NonNull MenuItem item) {
                switch (item.getItemId()) {
                    case R.id.tab_home:
                        fragment= TabOne.newInstance();
                        item.setChecked(true);
                        break;
                    case R.id.tab_email:
                        fragment= TabTwo.newInstance();
                        item.setChecked(true);
                        break;
                    case R.id.tab_members:
                        fragment= TabThree.newInstance();
                        item.setChecked(true);
                        break;
                    case R.id.tab_link:
                        fragment= TabFour.newInstance();
                        item.setChecked(true);
                        break;
                }
                final FragmentTransaction transaction = fragmentManager.beginTransaction();
                transaction.replace(R.id.content, fragment).commit();
                return false;
            }
    
        };`
    

    【讨论】:

      【解决方案4】:

      你可以像这样使用:

      View view = bottomNavigationView.findViewById(R.id.nav_button_two);
      view.performClick();
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多