У моего приложения есть viewpager и 4 вкладки, каждая вкладка имеет много фрагментов. Но я просто хочу, чтобы моя панель инструментов прокручивалась вверх/вниз, прокручивая recyclerview в 2 конкретных вкладках. Но я не знаю, как заблокировать прокрутку панели инструментов для других вкладок. Я попытался импортировать панель инструментов для каждого фрагмента, но, похоже, я не могу этого сделать. У кого-нибудь есть идея решить эту проблему?
Как настроить приложение: layout_scrollFlags для панели инструментов программно
Ответ 1
Я бы настоятельно рекомендовал не менять флажки прокрутки на основе выбранной вкладки, поскольку автоматическая возврат панели инструментов (и перемещение содержимого вниз) при прокрутке на вкладку не-recyclerview может быть очень резкой и, вероятно, не шаблоном взаимодействия вы хотите (раздражены, если ваши две вкладки RecyclerView
находятся рядом друг с другом).
Однако, если вы хотите увидеть его лично, вы можете использовать setScrollFlags() для программного программирования флажков прокрутки:
Toolbar toolbar = ... // your toolbar within an AppBarLayout
AppBarLayout.LayoutParams params =
(AppBarLayout.LayoutParams) toolbar.getLayoutParams();
params.setScrollFlags(AppBarLayout.LayoutParams.SCROLL_FLAG_SCROLL
| AppBarLayout.LayoutParams.SCROLL_FLAG_ENTER_ALWAYS);
Чтобы очистить флаги
params.setScrollFlags(0)
Ответ 2
// Show toolbar when we are in maps mode
AppBarLayout.LayoutParams params = (AppBarLayout.LayoutParams) mToolbar.getLayoutParams();
CoordinatorLayout.LayoutParams appBarLayoutParams = (CoordinatorLayout.LayoutParams) mAppBarLayout.getLayoutParams();
if(isMapIndex) {
params.setScrollFlags(0);
appBarLayoutParams.setBehavior(null);
mAppBarLayout.setLayoutParams(appBarLayoutParams);
} else {
params.setScrollFlags(AppBarLayout.LayoutParams.SCROLL_FLAG_SCROLL | AppBarLayout.LayoutParams.SCROLL_FLAG_ENTER_ALWAYS);
appBarLayoutParams.setBehavior(new AppBarLayout.Behavior());
mAppBarLayout.setLayoutParams(appBarLayoutParams);
}