Dmytro
https ))
Daniel
Daniel
От родительской
Daniel
Снэкбар прибивается к координатор лайоуту или к decorview
Daniel
Ты показываешь на диалоге
Daniel
А хочешь, чтобы отобразился на родительском фрагменте
Daniel
Вот и передай в Snackbar.make() вьюху родительского фрагмента
Dmytro
BottomSheetDialogFragment не?
Anton
Anton
я ее к координатору цепляю
Daniel
Daniel
Наверное это фон активности, на которой показываешь свой даилог
Daniel
Вот от активности и покажи снэкбар
Daniel
Тогда он (снэкбар) растянется на всю ширину decorView активности
Daniel
Те на всю ширину экрана
Anton
а лол, это крч скрин с гугла скрин, я говорю так же растянуть хочу)))
Anton
Anton
Anton
У меня она с отступами, вот хочу что б плотно прижималась
Daniel
(snackbar.view as Snackbar.SnackbarLayout).apply {
setWidth(MATCH_PARENT)
setHorizontalMargin(0)
setPadding(0, 0, 0, 0)
}
Daniel
Удачи)
Anton
Anton
подскажи что не так? до width не могу достучаться и horizontalMargin, пробовал по разносу комбинировать
Daniel
width задай через layoutparams
Daniel
margins тоже через MarginLayoutParams
Daniel
Заодно узнаешь что это)
Daniel
Супер, молодец что разобрался)
Daniel
Немного улучшу твой код. Надежнее написать вот так, чтобы обязательно вызвался setLayoutParams() у вьюшки
this.layoutParams = (layoutParams as MarginLayoutParams).apply {
width = MATCH_PARENT
setMargins(0, 0, 0, 0)
}
setPadding(0, 0, 0, 0)
Daniel
Еще можно посмотреть layout inspector-ом, на какой именно вьюшке стоят маргины/паддинги
Anton
благодарю!!)) буду разбираться!)
Anton
если в краце, то почему через apply надежней?
Mike
в краце — это где?)
Anton
вкратце
Daniel
Надежней не apply, а присвоение this.layoutParams после их изменения
Daniel
У вьюхи есть методы getLayoutParams и setLayoutParams
Daniel
Когда ты меняешь параметры, полученные с помощью getLayoutParams(),
Daniel
Лучше проставить их обратно методом setLayoutParams()
Daniel
А в котлине джавовый метод setLayoutParams() вызывается как this.layoutParams =
Daniel
Это все нужно чтобы гарантированно вызвался view.requestLayout() и вьюха перемежрилась и заново отрисовалась
Anton
если this убрать эффект будет не тот?
Daniel
(snackbar.view as Snackbar.SnackbarLayout).apply {
layoutParams = (layoutParams as MarginLayoutParams).apply {
width = MATCH_PARENT
setMargins(0, 0, 0, 0)
}
setPadding(0, 0, 0, 0)
}
Daniel
Я бы вот так написал)
Daniel
this можно убрать в этом примере
Daniel
Потому что мы работаем в контексте объекта приемника (во внешней лямбде)
Anton
благодарю!)
Daniel
А это как раз snackbar.view
Daniel
val snackbarView = snackbar.view as Snackbar.SnackbarLayout
(snackbarView.layoutParams as MarginLayoutParams).apply {
width = MATCH_PARENT
setMargins(0, 0, 0, 0)
}
snackbarView.setPadding(0, 0, 0, 0)
snackbarView.requestLayout
Daniel
Вот эквивалентный код
Daniel
snackbarView.requestLayout на самом деле вызовется в setPadding и необязателен
(до тех пор, пока ты не удалишь setPadding 🙂
Anton
шикарно!))
Anton
Daniel
Посмотри лайоут инспектором
Daniel
У какой вьюхи эти боковые паддинги
Daniel
Достань эту вьюху из иерархии и убери паддинги/маргины/поставь MATCH_PARENT
Daniel
вот такой план)
Anton
10/10
OK
Никто не сталкивался с проблемой совместной работы SwipeRefreshLayout/RecyclerView с ItemTouchHelper, после пары отключений и включений SwipeRefreshLayout свайп вниз для обновления перестает работать
OK
Точнее после пары drag'n'drop элементов внутри RecylcerView, SwipeRefreshLayout перестает работать
Mike
OK
Также есть, addOnScrollListener на RecyclerView, она отключает когда первый элемент виден, включает когда скроллишь вниз уже. При этом, когда свайп вниз перестает работать, отлавливал состояние SwipeRefreshLayout, он включен
Daniel
OK
Проект включает много кода
Daniel
Больше не подскажу по такому описанию
Alexey
Народ, а если в ответе от сервера может быть json любого вида, и из него нужно достать по ключю url(если он вообще будет) каким образом pojo тогда создавать?
Mike
Сергей
Mike
Mike
Сергей
Если там вообще могут прислать неизвестно что, включая malformed - почему бы ии нет
Mike
OK
Больше не подскажу по такому описанию
Попробую по другому. Скроллинг и включение элемента SwipeRefreshLayout делал следующим образом:
mRecyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
@Override
public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
int topRowVerticalPosition = (recyclerView == null || recyclerView.getChildCount() == 0) ? 0 : recyclerView.getChildAt(0).getTop();
swipeRefreshLayout.setEnabled(topRowVerticalPosition >= 0);
}
@Override
public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
super.onScrollStateChanged(recyclerView, newState);
}
});
Везде работает. Но когда внутри Fragment еще включил ItemTouchHelper, для drag'n'drop элементов внутри RecyclerView, данный способ перестает работать для SwipeRefreshLayout
После пары drag'n'drop элементов RecylerView перестает вызываться onRefresh, SwipeRefreshLayout. Хотя по последнему статусу он включен
Сергей
Ну да, потом с объекта
getJsonString
Если ключ известен
OK
Drag'n'drop элементов RecyclerView сделал на основе следующего ресурса:
https://medium.com/@ipaulpro/drag-and-swipe-with-recyclerview-6a6f0c422efd
С применением ItemTouchHelper, свайп в сторону отключен, использую только перемещение элементов RecyclerView
Daniel
Daniel
SwipeToDeleteItemTouchHelper(
onStartSwipe = { refresh.isEnabled = false }, //to prevent pull-to-refresh from processing swiping events
onFinishSwipe = { refresh.isEnabled = true },
onSwiped = { item, position ->…},
adapter = adapter,
contentViewExtractor = { it?.findViewById(R.id.lFilterContent) }
).attachToRecyclerView(recyclerView)
Daniel
Вот такое еще дам