Альтернативный фон для рядов в списке не работает при изменении размера строк
-
11-12-2019 - |
Вопрос
Я использую пользовательскую перечень для отображения списка, в котором даже строки имеют фоновые и нечетные строки.Для этого я сделал подкласс 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;
}
Но я до сих пор не понимаю, почему проблема произошла.