Проблема, которую вы описываете, заключается в том, что при открытии папки вложенные элементы (в данном случае файлы) добавляются на уровень выше, чем они должны быть, что и приводит к нарушению визуальной иерархии.
Чтобы исправить это, необходимо учитывать уровень вложенности при добавлении дочерних элементов. Для этого можно модифицировать метод `openFolder2`, чтобы он не только добавлял дочерние элементы после выбранной папки, но и корректировал уровень их вложенности.
Например, вы можете передать уровень вложенности в метод `openFolder2` и затем использовать его для изменения уровня при добавлении дочерних элементов в список.
Вот пример модифицированного кода:
```java
private void openFolder2(Node node, int currentLevel) {
node.isOpen = true;
List<Node> toAdd = new ArrayList<>();
for (Node child : node.children) {
// Устанавливаем уровень вложенности для дочерних элементов
child.level = currentLevel + 1; // Увеличиваем уровень вложенности
toAdd.add(child);
}
nodes.addAll(nodes.indexOf(node) + 1, toAdd);
notifyItemRangeInserted(nodes.indexOf(node) + 1, toAdd.size());
}
```
Теперь при каждом открытии папки вы можете передавать текущее значение уровня:
```java
// Пример вызова
openFolder2(selectedNode, currentLevel);
```
Вам нужно будет также гарантировать, что ваш класс `Node` имеет поле `level`, чтобы сохранять информацию о текущем уровне вложенности узла.
Кроме того, вам может понадобиться изменить способ отображения данных в вашем `RecyclerView`, чтобы использовать это поле для визуального отображения уровня вложенности (например, добавлением отступов или других визуальных индикаторов).
Таким образом, структура вашей иерархии будет корректной:
- до открытия:
```
root
- folder1
- folder2
- folder3
```
- после открытия:
```
root
- folder1
-- file1
-- file2
- folder2
- folder3
```
Убедитесь, что ваш адаптер `RecyclerView` учитывает уровень вложенности и визуально отображает его правильно.