代码之家  ›  专栏  ›  技术社区  ›  Meena Dev

在点击Backpress时,如何在BottomNavigationView中突出显示相应的片段项图标?

  •  0
  • Meena Dev  · 技术社区  · 7 年前

    我有一个 底部导航视图 具有 三 项目 屏幕底部的选项卡。每个项目选项卡都有 两段 在里面。我点击这个流程, 项1碎片->项2碎片->项3碎片->子项3碎片1->子项3碎片2 . 所以当我 背压 从 项目3碎片,项目2碎片 和 ITEM1片段 相应的项目图标将突出显示。

    我指的是这个职位 Change BottomNavigationView Icons on Back Button clicked

    我需要的是当我从 ITEM3-片段 流量应该是 子项3分段1(突出显示第3项图标)->项3分段(突出显示第3项图标)->项2分段(突出显示第2项图标)->项1分段(突出显示第1项图标)

    我用 transaction.addTobackStack(“subfrag”);

    Deque<Integer> mStack = new ArrayDeque<>();
    boolean isBackPressed  = false;
    
    private void setBottomNavigationView() {
        mBottomNavigationView.setOnNavigationItemSelectedListener(new BottomNavigationView.OnNavigationItemSelectedListener() {
            @Override
            public boolean onNavigationItemSelected(@NonNull MenuItem item) {
                switch (item.getItemId()) {
                    case R.id.ic_home:
                         if(!isBackPressed) {
                           pushFragmentIntoStack(R.id.ic_home);
                       }
                        isBackPressed = false
                        setFragment(HomeFragment.newInstance(), HOME_FRAGMENT);
                        return true;
                    case R.id.ic_search:
                        if(!isBackPressed) {
                           pushFragmentIntoStack(R.id.ic_search);
                       }
                        isBackPressed = false
                        setFragment(SearchFragment.newInstance(), SEARCH_FRAGMENT);
                        return true;
                    case R.id.ic_circle:
                        if(!isBackPressed) {
                           pushFragmentIntoStack(R.id.ic_circle);
                       }
                        isBackPressed = false
                        setFragment(ShareFragment.newInstance(), SHARE_FRAGMENT);
                        return true;
    
                    default:
                        return false;
                }
            }
        });
        mBottomNavigationView.setOnNavigationItemReselectedListener(new 
              BottomNavigationView.OnNavigationItemReselectedListener() {
            @Override
            public void onNavigationItemReselected(@NonNull MenuItem item) {
    
            }
        });
     mBottomNavigationView.setSelectedItemId(R.id.ic_home);
     pushFragmentIntoStack(R.id.ic_home);
    }
    
    private void pushFragmentIntoStack(int id)
    {
        if(mStack.size() < 3)
        {
            mStack.push(id);
        }
        else
        {
            mStack.removeLast();
            mStack.push(id);
        }
    }
    
    private void setFragment(Fragment fragment, String tag) {
        FragmentTransaction transaction = mFragmentManager.beginTransaction();
        transaction.replace(R.id.container, fragment, tag);
        transaction.commit();
    }
    
    @Override
    public void onBackPressed() {
        if(mStack.size() > 1)
        {
            isBackPressed = true;
            mStack.pop();
            mBottomNavigationView.setSelectedItemId(mStack.peek());
        }
        else 
        {
            super.onBackPressed();
        }
    }
    
    1 回复  |  直到 7 年前
        1
  •  0
  •   Meena Dev    7 年前

    我通过 片名 ,使用我分配的片段名 身份证件 对于 表项 然后使用 列表项ID

     Menu menu = bottomNavigationView.getMenu();
     MenuItem menuItem = menu.getItem(tabId);
     menuItem.setChecked(true);