Я пытаюсь добавить анимацию к моим Fragment
транзакциям.Все выглядит хорошо, кроме одного случая.Это Fragment
содержит RecyclerView
, который устанавливается с databinding
.Данные также связаны через ObservableArrayList
с binding
.
Это то, что происходит в Fragment
.
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?): View? {
mViewModel = ViewModelProviders.of(requireActivity(), mViewModelFactory).get(MainMenuViewModel::class.java)
setHasOptionsMenu(true)
mBinding = DataBindingUtil.inflate(inflater, R.layout.fragment_main_menu, container, false)
return with(mBinding) {
callback = this@MainMenuFragment
viewModel = mViewModel
executePendingBindings()
root
}
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
loadMenu()
subscribeToUserNotification()
subscribeToPromoItemSearchResult()
}
Этот фрагмент загружается, когда действие запускается и работаеткак и ожидалось.Но после любой другой транзакции фрагмента popAnimation не запускается только для этого фрагмента после добавления executePendingBindings()
.Существует только задержка в 350 (как установлено для перехода), и фрагмент просто появляется без видимого перехода.
Я бы хотел удалить executePendingBindings()
, но у меня возникла другая проблема.Метод loadMenu()
обновляет список данных для утилизатора, и при первом запуске данные запрашиваются из Интернета, и поэтому с небольшой задержкой связывание успевает инициализировать все зависимости.Но когда я нажимаю назад после второй транзакции фрагмента, данные уже присутствуют, и когда мой BindingAdapter
активирован, адптер утилизатора имеет нулевое значение и не отображается вообще.Даже если метод loadMenu()
находится в onViewCreated
, а привязка инициализируется в onCreateView
.
Таким образом, решением будет либо исправить переход, либо исправить привязку, не инициализируемую вовремя.
Добавление моего адаптера привязки и XML для справки
@BindingAdapter("category_list")
public static void addCategoriesToAdapter(RecyclerView recyclerView, ObservableArrayList<MainMenuCategory> catList) {
MenuCategoriesAdapter adapter = (MenuCategoriesAdapter) recyclerView.getAdapter();
if (adapter != null) { //here the adapter happens to be null when onBackPressed after a second fragment transaction
adapter.getCategories().clear();
adapter.getCategories().addAll(catList);
adapter.notifyDataSetChanged();
}
}
<androidx.recyclerview.widget.RecyclerView
app:adapter="@{callback.getCategoriesAdapter()}"
app:category_list="@{viewModel.catList}"
app:manager="@{callback.getMenuLayoutManager()}" />