如何在点击背压的同时在BottomNavigationView中突出显示相应的片段项目图标



我有一个BottomNavigationView,屏幕底部有3项目选项卡。每个项目选项卡中都有两个片段。我正在单击此流,Item1Fragment->Item2Fragment->Items3Fragment->SubItem3Fragment1->SubItem3Flagment2。因此,当我Item3Fragment、Item2FragmentItems1Fragment的反向按压时,相应的项目图标将突出显示。

我指的是这篇文章更改底部导航查看后退按钮上的图标点击

我需要的是,当我从Item3Fragment反向按压时,流应该是SubItem3Fragement1(第三个项目图标高亮显示)->Item3Fragment

我用调用SubItemFragmentstransaction.addToBackStack("子碎片")

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();
}
}

我通过获得片段名称,使用我为tabItem分配id的片段名称来修复这种情况。然后使用TabItemid

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

最新更新