Изменить значки AppBar в зависимости от контекста (фрагменты) - PullRequest
0 голосов
/ 03 июля 2018

У меня есть AppBar на моем MainActivity. My MainActivity имеет макет, который работает как контейнер фрагментов.

Я хочу, чтобы мои иконки AppBar менялись в зависимости от того, какой фрагмент сверху в данный момент.

как то так:

switch (item.getItemId()){
    case R.id.semanario:
        fragmentTransaction.replace(R.id.viewPagerMainContenedor, new FragmentSemanario());
        fragmentTransaction.addToBackStack(null).commit();
        myToolbar.SETICON(R.drawable.iconExample) (And how to change the xml atributte "app:showAsAction = always)
        break;

Я думал о создании AppBar для каждого фрагмента, но это должно быть проще, не так ли?

Ответы [ 2 ]

0 голосов
/ 03 июля 2018

Добавьте метод внутри вашей основной деятельности примерно так:

updateToolbar(int title, int drawable){
 toolbar.setTitle(title);
 toolbar.setIcon(drawable);
}

и затем вызовите этот метод из вашего фрагмента:

getActivity().updateToolbar(title,R.drawable.icon);

Чтобы изменить значок переполнения действия:

<style name="AppTheme.Base" parent="Theme.AppCompat.Light">
<item name="actionOverflowButtonStyle">@style/OverFlow</item>
</style>

<style name="OverFlow" 
parent="Widget.AppCompat.ActionButton.Overflow">
<item name="android:src">@drawable/my_overflow_menu</item>
</style>

Для других пользовательских значков вы можете просто обновить их. Надеюсь, это поможет.

0 голосов
/ 03 июля 2018

Если ваш AppBar отличается для некоторых Fragments, вы должны поместить AppBar в Fragment. Прямо сейчас вы, вероятно, сможете управлять изменением AppBar с помощью FragmentTransactions, но позже, когда вы создаете навигацию назад / вверх или диплинкинг, он начнет ломаться, и вы захотите поместить его во фрагмент с самого начала.

РЕДАКТИРОВАТЬ: Когда пользователь нажимает на элемент меню, вы знаете, к чему Fragment пользователь перемещается, потому что вы делаете FragmentTransaction самостоятельно. Однако, когда пользователь нажимает кнопку «назад», Android сделает для вас FragmentTransaction, и становится все труднее судить, к чему Fragment пользователь перемещается. Вы можете перебрать все Fragments в FragmentManager и проверить, что Fragment видно, но может быть несколько Fragments видимых одновременно (например, ViewPager или представления планшета). Управление Fragments и обратным стеком уже является трудной задачей, когда пользователь входит в ваше приложение по глубокой ссылке.

По мере роста вашего приложения навигация будет становиться все более сложной. Ваша будущая личность поблагодарит вас за то, что вы добавили AppBar в Fragment вместо Activity, потому что вам не придется беспокоиться о его синхронизации с отображаемым в данный момент Fragment.

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