private async Task SetCurrentNodeWithAnimationAsync(TreeNode <T, TKey> selectedNode) { var diffResult = TreeMenuDiff.Calculate(_currentNode, selectedNode); diffResult .ChangedIndexes .Select(x => (cell: _recyclerView.FindViewHolderForLayoutPosition(x.Index), relation: x.Relation)) .Where(x => x.cell != null) .ForEach((_, x) => _itemStateChanged(x.cell, x.relation)); _currentNode = selectedNode; _itemCollection.CurrentNode = selectedNode; _itemAnimator.DiffResult = diffResult; await AnimateDiffAsync(diffResult); NodeSelected?.Invoke(this, selectedNode); }