Как указывает jprofitt, вы должны использовать drawListRow, чтобы лучше использовать ListField.
Для проблемы с фокусом ListField будет обрабатывать чертеж с фокусом для вас. Он будет нарисован до того, как будет вызван ваш код рисования, поэтому, чтобы избежать потери цвета фокуса, вам нужно прекратить рисовать полоску зебры для выбранной строки. Если вы добавите логику продолжения в начало цикла, вы снова увидите селектор.
if(x == getSelectedIndex()) { continue; }
Вам также потребуется обновить логику рисования, чтобы использовать цвета, которые хорошо контрастируют с синим цветом подсветки, но только для выбранной строки.