首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在BottomNavigationView中高亮显示相应的片段项图标,同时单击backpress?

如何在BottomNavigationView中高亮显示相应的片段项图标,同时单击backpress?
EN

Stack Overflow用户
提问于 2019-01-09 11:09:03
回答 1查看 109关注 0票数 0

在项目选项卡的BottomNavigationView底部有一个带有3 项目选项卡的,其中有两个片段。我点击这个流,Item1Fragment -> Item2Fragment -> Item3Fraging -> SubItem3Fragment1 -> SubItem3Fragment2。因此,当我从Item1Fragment's Item3Fragment反向按时,Item2Fragment和的对应项图标会被高亮显示。

我指的是Change BottomNavigationView Icons on Back Button clicked这篇文章

我需要的是当我从Item3Fragment反按时,流应该是SubItem3Fragment1(突出显示第3项图标) -> Item3Fragment (突出显示第3项图标)-> Item2Fragment (突出显示第2项图标)->Item1Fragment(突出显示第1项图标)

我用transaction.addToBackStack("subfrag");调用SubItemFragments

代码语言:javascript
复制
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();
    }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-01-11 11:58:57

我通过获取片段名修正了这个情况,使用了使用tabItem idtabItem.Then分配id的片段名。

代码语言:javascript
复制
 Menu menu = bottomNavigationView.getMenu();
 MenuItem menuItem = menu.getItem(tabId);
 menuItem.setChecked(true);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54108764

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档