Мне кажется, что вы неправильно обрабатываете создание новых представлений.
Текст отображается белым, это говорит о том, что блок else пропущен (поэтому параметр convertView был нулевым или чтонет представлений для повторного использования (что справедливо, так как вы видите намного больше представлений, когда исчезает программная клавиша)
Строка окрашивается правильно после прокрутки вверх / вниз, потому что теперь у вас есть представления для повторного использования, и поэтому вы будетевведите блок else.
Имхо, вы должны полностью удалить ключевое слово else. Таким образом, вы будете вводить if (где вы создаете новое представление) только в случае необходимости, но в противном случае вы всегда будете ставитьправильный цвет, даже если вид новый и не переработан.
Попробуйте и скажите, работает ли он
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View row = convertView;
ArrayHolder holder = null;
if(row == null)
{
LayoutInflater inflater = ((Activity)context).getLayoutInflater();
row = inflater.inflate(layoutResourceId, parent, false);
holder = new ArrayHolder();
holder.txtTitle = (TextView)row.findViewById(R.id.txtTitle);
row.setTag(holder);
}
//this part must be executed every time, not only for recycled views
if(position % 2 == 0){row.setBackgroundColor(Color.DKGRAY);}
else{row.setBackgroundColor(Color.BLACK);}
Typeface font1 = Typeface.createFromAsset(context.getAssets(), "fonts/kingrich.ttf");
((TextView)row.findViewById(R.id.txtTitle)).setTypeface(font1);
((TextView)row.findViewById(R.id.txtTitle)).setTextColor(Color.rgb(153, 255, 102));
holder = (ArrayHolder)row.getTag();
String array = data.get(position);
holder.txtTitle.setText(array);
return row;
}