BottomNavigationViewを使用してフラグメントを切り替えました。フラグメントが再度開かないように、現在選択されているメニュー項目を取得する方法は?
BottomNavigationView bottomNavigationView = (BottomNavigationView)
findViewById(R.id.bottom_navigation);
bottomNavigationView.setOnNavigationItemSelectedListener(
new BottomNavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item) {
switch (item.getItemId()) {
case R.id.action_1:
// open fragment 1
break;
case R.id.action_2:
// open fragment 2
break;
case R.id.action_3:
// open fragment 3
break;
}
return false;
}
});
}
解決:
private int getSelectedItem(BottomNavigationView bottomNavigationView) {
Menu menu = bottomNavigationView.getMenu();
for (int i = 0; i < bottomNavigationView.getMenu().size(); i++) {
MenuItem menuItem = menu.getItem(i);
if (menuItem.isChecked()) {
return menuItem.getItemId();
}
}
return 0;
}
最初に選択されたアイテムを取得し、getMenu().findItem(int itemId)
を取得します
bottomNavigationView.getMenu().findItem(bottomNavigationView.getSelectedItemId())
getSelectedItemId
を使用して、現在選択されているメニュー項目IDを取得します。
int selectedItemId = bottomNavigationView.getSelectedItemId();
MenuItem selectedItem = bottomNavigationView.getMenu().findItem(selectedItemId);
このメソッドは、Android Support Library 25.3.0。
前のアイテムが次のアイテムであるかどうかをチェックするための最も簡単な解決策はこれだと思います:
BottomNavigationView bottomNavigationView = (BottomNavigationView) findViewById(R.id.bottom_navigation);
bottomNavigationView.setOnNavigationItemSelectedListener(
new BottomNavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item) {
final int previousItem = bottomNavigationView.getSelectedItemId();
final int nextItem = item.getItemId();
if (previousItem != nextItem) {
switch (nextItem) {
case R.id.action_1:
// open fragment 1
break;
case R.id.action_2:
// open fragment 2
break;
case R.id.action_3:
// open fragment 3
break;
}
}
return true;
}
}
);
関数はイベントを消費するため、反復する必要はなく、onNavigationItemSelected
はtrue
を返すことに注意してください。
私はそれが誰かを助けることを願っています。