Альтернативный фон для рядов в списке не работает при изменении размера строк

StackOverflow https://stackoverflow.com//questions/12649564

Вопрос

Я использую пользовательскую перечень для отображения списка, в котором даже строки имеют фоновые и нечетные строки.Для этого я сделал подкласс arrayAdapter с методом inveriden getview (int, view, viewgroup) и установить фоновый ресурс для четных строк там.

Работал, но мне нужно было отрегулировать размеры взглядов, чтобы быть равными в рядах с фоном, поэтому я отрегулировал LayoutParams следующим образом:

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    View view = super.getView(position, convertView, parent);
    if ((position & 1) == 0) {
        view.setBackgroundResource(R.drawable.marcador_wink_normal);
    }
    ViewGroup.LayoutParams params = view.getLayoutParams();
    params.height = rowHeight;
    view.setLayoutParams(params);
    return view;
}
.

Я попробовал это, и, казалось, работал, пока я не прокручиваю, а затем вверх, что привело к фоновому фону на каждом ряду.

Мой вопрос: что я делаю не так?

Я использую библиотеку поддержки V4 для фрагментов, и это метод OnCreate (Bundle) моего пользовательского списка:

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    int layout = Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB ?
            android.R.layout.simple_list_item_activated_1 : android.R.layout.simple_list_item_1;

    setListAdapter(new WinkAdapter(getActivity(), layout, TEST_LIST));
}
.

Это было полезно?

Решение

Вид, используемый для сооружения списка, повторно используются после того, как они не видны на экране.

В вашем исходном коде, как только фон был установлен на r.drawable.marcador_wink_normal на данном представлении, он был r.drawable.marcador_wink_normal навсегда.Когда вы добавили больше, вы сделали его правильно на этих повторных данных.

Другие советы

Хорошо, я решил, что только добавляет оператор ELLAL :

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    View view = super.getView(position, convertView, parent);
    if ((position & 1) == 0) {
        view.setBackgroundResource(R.drawable.marcador_wink_normal);
    }
    else {
        view.setBackgroundColor(0);
    }
    ViewGroup.LayoutParams params = view.getLayoutParams();
    params.height = 100;
    view.setLayoutParams(params);
    return view;
}
.

Но я до сих пор не понимаю, почему проблема произошла.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top