The marker was showing up in the correct location when it's online.
The projection was done correctly. I have always transformed the lat-lon values into the map's spatial reference (using GeometryEngine.project()). The problem was that the map might not be (or is currently initializing) initialized with offline features due to huge size of tpk file (over 600MBs). Therefore, it might cause the projection to fail and the transformed lat lon falls back to the default/invalid coordinate ( the coordinate that shows up on top of the sea southwest of the Africa continent). When I added a small 1s-ish delay, it shows up on the correct position
Not only markers, but map centering (MapView.centerAt() method) does not work when the map is still initializing (with offline features)
I had an offline tpk file of Darmstadt city, Germany, and was trying to put a marker on top of Luisenplatz