Ваш код парсера должен будет помнить, в каком виде он находится в данный момент во время события START_TAG для тега плитки.
Один из способов сделать это - создать поле String currentLayer;
и где-нибудь ещев вашем коде есть сегменты кода, напоминающие
if (xrp.getEventType() == XmlResourceParser.END_TAG)
{
String s = xrp.getName();
if (s.equals("layer"))
{
currentLayer = null; // or something ...
}
}
и
if (xrp.getEventType() == XmlResourceParser.START_TAG)
{
String s = xrp.getName();
if (s.equals("layer"))
{
currentLayer = xrp.getAttributeValue(null, "name", 0);
}
}
Затем в вашем коде, имеющем дело с тегом тайла, вы будете использовать это поле, чтобы решить, какое действие предпринять с чем-либо
if (xrp.getEventType() == XmlResourceParser.START_TAG)
{
String s = xrp.getName();
if (s.equals("tile"))
{
int a = xrp.getAttributeIntValue(null, "gid", 0);
if ("layer1".equals(currentLayer) {
// process layer1 tile.
}
else if ("layer2".equals(currentLayer) {
// process layer2 tile.
}
else {
// handle occurrence of tile outside layer.
}
}
}
Это не обязательно лучший подход, особенно если он приводит к огромным вложенным конструкциям if-else, но это может помочь вам начать работу.
Лучшим подходом может быть использованиеполе для делегата, который обрабатывает тайлы, задайте ему соответствующий объект «процессор-тайл» (который вы должны будете определить как отдельный класс) во время обработки начального события для тега слоя и используйте его при обработкетег плитки.Но сложнее вставить фрагменты кода.