Удалите кнопку вверх с панели действий при навигации с помощью BottomNavigationView с библиотекой пользовательского интерфейса навигации Android - PullRequest
0 голосов
/ 12 мая 2018

Я создал небольшое приложение с тремя фрагментами для навигации верхнего уровня через BottomNavigationView.Если вы запустите приложение и нажмете кнопку навигации на нижней панели навигации, вы увидите кнопку вверх на панели действий.Вот код действия:

class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.main_activity)

        setSupportActionBar(toolbar)

        val navController = navHostFragment.findNavController()
        setupActionBarWithNavController(this, navController)
        setupWithNavController(bottomNav, navController)
    }

    override fun onSupportNavigateUp(): Boolean
            = findNavController(navHostFragment).navigateUp()

}

Вот скриншот с результатом.Приложение запускается на главном экране, и все, что я сделал, это просто нажмите кнопку профиля в BottomNavigationView.

enter image description here

Я пытался прослушатьна выбор элементов BottomNavigationView и навигацию вручную, используя различные NavOptions , но безрезультатно.Есть ли что-нибудь, что мы можем сделать, чтобы не показывать кнопку «вверх» на панели действий, пока пользователь перемещается с BottomNavigationView?

Ответы [ 4 ]

0 голосов
/ 12 июня 2019

Если вы используете NavigationUI.setupWithNavController , проверьте onNavDestinationSelected.

В вашем нижнем навигационном представлении menu.xml, добавьте android:menuCategory="secondary" к соответствующему MenuItem:

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">

  <item
    android:id="@+id/profileFragment"
    android:icon="@drawable/bottom_nav_icon_profile"
    android:menuCategory="secondary"
    android:title="@string/profile" />
0 голосов
/ 20 сентября 2018

Используйте это вместо setupWithNavController:

navController.addOnNavigatedListener(new NavController.OnNavigatedListener() {
     @Override
     public void onNavigated(@NonNull NavController controller, @NonNull NavDestination destination) {
         toolbar.setTitle(destination.getLabel());
     }
});

Или эквивалент в Kotlin.

Единственное, что делает setupWithNavController, - это добавляет слушателя для изменения заголовка панели инструментов и создает кнопку вверх. Если вам не нужна кнопка «вверх», просто добавьте прослушиватель, который меняет только заголовок панели инструментов.

0 голосов
/ 25 ноября 2018

Начиная с 1.0.0-alpha07, вы можете использовать AppBarConfiguration для настройки этого поведения.

AppBarConfiguration имеет конструктор Builder, так что вы можете создать новый Builder с определенным набором назначений верхнего уровня, на который ссылается их id (это id - это то, что вы установили в вашем навигационном макете).

Создать новый AppBarConfiguration:

val appBarConfiguration = AppBarConfiguration
            .Builder(
                    R.id.navigationHomeFragment,
                    R.id.navigationListFragment,
                    R.id.navigationProfileFragment)
            .build()

Тогда вместо setupActionBarWithNavController(this, navController) нужно позвонить setupActionBarWithNavController(this, navController, appBarConfiguration)

Это правильный способ работы с топовыми режимами навигации.

0 голосов
/ 19 мая 2018

У меня была та же проблема, и я нашел способ получить текущий фрагмент с помощью NavController.addOnNavigatedListener , поэтому я применил следующую логику в своей Деятельности, и пока она работает для меня

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_home)
    val navHost = supportFragmentManager
            .findFragmentById(R.id.navHostFragment) as NavHostFragment

    navHost.navController.addOnNavigatedListener { _, destination ->
        val showButton = showUpButton(destination.id)
        //Here occurs the magic
        supportActionBar?.setDisplayShowHomeEnabled(showButton)
        supportActionBar?.setDisplayHomeAsUpEnabled(showButton)
    }
}

//Check according to your convenience which fragment id
//should show or hide the "Up Button"
private fun showUpButton(id: Int): Boolean {
    return id != R.id.your_home_fragment && id != R.id.your_list_fragment 
            && id != R.id.your_profile_fragment
}

А это мой проект ...

enter image description here

Я не знаю, является ли это лучшим вариантом, но если у кого-то есть предложение получше, оно будет приветствоваться

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...