diff --git a/.maestro/flows/empty_lists_parsing.yaml b/.maestro/flows/empty_lists_parsing.yaml
new file mode 100644
index 00000000..600aeca9
--- /dev/null
+++ b/.maestro/flows/empty_lists_parsing.yaml
@@ -0,0 +1,38 @@
+appId: swmansion.enriched.example
+---
+# PR #542 - fix(android): parsing empty lists
+# Validates that lists with empty and whitespace-only items are parsed and displayed correctly
+- launchApp
+
+- tapOn:
+ id: "toggle-screen-button"
+
+- runFlow:
+ file: "../subflows/set_editor_value.yaml"
+ env:
+ VALUE: >
+
+
+ - First
+ -
+ - Third
+
+
+
+
+
+- tapOn:
+ id: "size-max-button"
+
+- runFlow:
+ file: "../subflows/capture_or_assert_screenshot.yaml"
+ env:
+ SCREENSHOT_NAME: "empty_lists_parsing"
diff --git a/.maestro/screenshots/android/empty_lists_parsing.png b/.maestro/screenshots/android/empty_lists_parsing.png
new file mode 100644
index 00000000..d777b0b2
Binary files /dev/null and b/.maestro/screenshots/android/empty_lists_parsing.png differ
diff --git a/.maestro/screenshots/ios/empty_lists_parsing.png b/.maestro/screenshots/ios/empty_lists_parsing.png
new file mode 100644
index 00000000..015e7d39
Binary files /dev/null and b/.maestro/screenshots/ios/empty_lists_parsing.png differ
diff --git a/android/src/main/java/com/swmansion/enriched/common/parser/EnrichedParser.java b/android/src/main/java/com/swmansion/enriched/common/parser/EnrichedParser.java
index 9a03613d..7038d21c 100644
--- a/android/src/main/java/com/swmansion/enriched/common/parser/EnrichedParser.java
+++ b/android/src/main/java/com/swmansion/enriched/common/parser/EnrichedParser.java
@@ -843,7 +843,6 @@ public void endElement(String uri, String localName, String qName) {
public void characters(char[] ch, int start, int length) {
StringBuilder sb = new StringBuilder();
- if (length > 0) isEmptyTag = false;
/*
* Ignore whitespace that immediately follows other whitespace;
@@ -871,6 +870,11 @@ public void characters(char[] ch, int start, int length) {
sb.append(c);
}
}
+ // Only mark the tag as non-empty if content was actually appended after
+ // whitespace collapsing. A space-only list item (e.g. ) would
+ // have its space dropped when the preceding char is a newline, leaving
+ // nothing to anchor a span — the ZWS placeholder must still be inserted.
+ if (sb.length() > 0) isEmptyTag = false;
mSpannableStringBuilder.append(sb);
}