Если вы используете видовой пейджер, убедитесь, что соответствующий фрагмент действительно привязан к его активности (это то, что ошибка пытается сообщить вам). Может случиться, что фрагмент не виден, поэтому он не прикреплен (в зависимости от того, как был настроен пейджер представления).
быстрое и грязное исправление:
public void search(String query) {
if(!isAdded()) return; //<---- returns if the fragment is not attached
query = "%" + query + "%";
if (myListViewModel == null) {
myListViewModel = ViewModelProviders.of(this, viewModelFactory).get(MyListViewModel.class);
}
if (myListViewModel.mList != null && myListViewModel.mList.hasActiveObservers()) {
myListViewModel.mList.removeObservers(this);
}
myListViewModel.getFilteredList(query).observe(this, mainObserver);
}
Однако вам следует повторно исследовать свою архитектуру, поскольку эти проверки часто подразумевают некоторые другие запахи кода. При работе с новыми шаблонами архитектуры Android эта проверка не требуется, так как шаблон жизненного цикла обрабатывает все это для вас: https://developer.android.com/topic/libraries/architecture/lifecycle
Таким образом, в принципе, вы не должны напрямую вызывать какую-либо функцию фрагмента, вместо этого вызывать соответствующую бизнес-логику, которая уведомляет фрагмент об обновлении его представлений.