получить данные из навигационной активности в навигационной библиотеке - PullRequest
0 голосов
/ 06 июня 2018

Я использую библиотеку навигации из компонентов архитектуры, где в MainActivity я устанавливаю навигацию и панель инструментов в качестве основной панели инструментов для всего приложения.В файле navigation.xml я настраиваю приложение: startDestination для одного из фрагментов.Можно ли получить данные о Панели инструментов, которая заблокирована в MainActivity, когда я уже в запущенном фрагменте?

MainActivity:

ublic class MainActivity extends AppCompatActivity {
private NavigationActivityBinding binding;

@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    binding = DataBindingUtil.setContentView(this, R.layout.navigation_activity);
    NavHostFragment hostFragment =
            (NavHostFragment) getSupportFragmentManager().findFragmentById(R.id.my_nav_host_fragment);
    setSupportActionBar(binding.toolbar);

    NavController navController = hostFragment.getNavController();
    setupActionBar(navController);
    setupBottomNavigation(navController);
}

private void setupBottomNavigation(NavController navController) {
    NavigationUI.setupWithNavController(binding.bottomNavView, navController);
}

private void setupActionBar(NavController navController) {
    NavigationUI.setupActionBarWithNavController(this, navController, null);
}}

navigation.xml:

<navigation xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
app:startDestination="@+id/launcher_home">
<fragment
    android:id="@+id/launcher_home"
    android:name="josiak.android.example.cryptocurrency.charts.ui.CryptocurrencyMainList"
    android:label="fragment_cryptocurrency_main_list"
    tools:layout="@layout/fragment_cryptocurrency_main_list" />

Ответы [ 2 ]

0 голосов
/ 07 июня 2018

Вы можете добавить addOnNavigatedListener внутри своей деятельности, и в зависимости от текущего назначения сделайте что-нибудь с панелью инструментов.Если вы хотите передать некоторые данные текущему фрагменту, вы можете использовать viewmodel, прикрепленный к действию, и установить параметры / состояния, для которых фрагмент прослушивает.

findNavController(nav_host_fragment).addOnNavigatedListener { controller, 
destination ->
    when(destination.id) {
        R.id.destination1 -> {
            //Do something with your toolbar
        }
        R.id.destination2 -> {
            //Do something with your toolbar
        }

 }
}
0 голосов
/ 06 июня 2018

Когда я пытался ((MainActivity).getActivity()).getSupportActionBar() в методе жизненного цикла фрагмента onActivityCreated(), он возвращал нулевое значение для getHeight(), но когда я пытался сделать ((MainActivity).getActivity()).getSupportActionBar().getHeight() при нажатии кнопки / пункта меню, это работает.Похоже, я могу получить высоту панели действий только после активации фрагмента.

...