Когда я прокручиваю listview с пользовательским адаптером слишком быстро вверх и вниз, getView() начинает вести себя странно. Почему?

У меня есть listview с пользовательским arrayadapter, который обрабатывает около 15 строк. Стиль каждой строки чередуется (между метками и значениями для этих меток - например, строка 1 может быть "адрес электронной почты", а строка 2 - фактический адрес электронной почты). Я изменяю стиль каждой строки, чтобы он чередовался следующим образом в методе getView() адаптера массива. Таким образом, если элемент в текущей позиции является меткой, я изменю стиль строки на стиль по умолчанию (который применяется к значениям). Когда список загружается впервые, стилизация идеальна и именно такая, как я хочу. Если я медленно прокручиваю список вверх или вниз, он остается таким же. Однако, если я прокручиваю список быстро вверх и вниз, стиль строк значений начинает меняться на стиль строк меток, пока все строки не будут иметь стиль строки меток. Кто-нибудь знает, почему это может происходить? Я использовал пользовательские адаптеры для других видов списка в приложении без подобных проблем.

Edit: Обнаружил, что он также меняет стилистику всех строк на стилистику ярлыка при смене ориентации портрет->ландшафт. Этого не происходит при смене ландшафтной ориентации на портретную. Ниже приведен адаптер, который я использую. Я что-то упускаю?

public class DetailsAdapter extends ArrayAdapter<String> {

private TextView text = null;
private String item = null;

public DetailsAdapter(Context context, int resource, int textViewResourceId, String[] objects) {
    super(context, resource, textViewResourceId, objects);
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    text = (TextView) super.getView(position, convertView, parent);
    item = getItem(position);
    if (item.equals("Name") || item.equals("Mobile") || item.equals("Home") || item.equals("Email") || item.equals("Address")) {
        text.setBackgroundColor(0xFF575757);
        text.setTextSize(15);
        text.setTypeface(null, Typeface.BOLD);
        text.setPadding(8, 5, 0, 5);
    } else {
        text.setPadding(15, 15, 0, 15);
    }
    return text;
}

@Override
public boolean isEnabled(int position) {
    item = getItem(position);
    if (item.equals("Name") || item.equals("Mobile") || item.equals("Home") || item.equals("Email") || item.equals("Address")) {
        return false;
    } else {
        return true;
    }
}
}
5
задан oliverwhite 5 August 2010 в 16:24
поделиться