【问题标题】:How to highlight the corresponding fragment item icon in BottomNavigationView while clicking on backpress?单击backpress时如何在BottomNavigationView中突出显示相应的片段项图标?
【发布时间】:2019-01-09 11:09:03
【问题描述】:

我有一个 BottomNavigationView,屏幕底部有 3 item 标签。每个 item 标签都有 两个片段。我点击这个流程,Item1Fragment -> Item2Fragment -> Item3Fragment-> SubItem3Fragment1 -> SubItem3Fragment2。所以当我从 Item3Fragment 、Item2Fragment backpressItem1Fragment 的 对应的项目图标被突出显示。

我指的是这个帖子Change BottomNavigationView Icons on Back Button clicked

我需要的是当我从 Item3Fragment 回压时,流程应该是 SubItem3Fragment1(突出显示第 3 项图标)-> Item3Fragment(突出显示第 3 项图标)-> Item2Fragment(突出显示第 2 项图标)->Item1Fragment(第一个项目图标突出显示)

我正在调用 SubItemFragments 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();
    }
}

【问题讨论】:

    标签: android android-fragments fragment bottomnavigationview


    【解决方案1】:

    我通过获取 片段名称 解决了这种情况,使用我为 tabItem 分配 id 的片段名称。然后使用 tabItem id

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-14
      • 2021-04-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多