У меня есть вид переработчика. У меня много просмотров для разных типов контента.
Я создаю свои держатели следующим образом:
/**
* Create instance of
* compatible viewholder
*
* @param viewType
* @param parent
* @return
*/
private AbstractHolder createAbstractHolder(int viewType, ViewGroup parent) {
AbstractHolder holder = null;
switch (viewType) {
case VersyConstants.HOLDER_TYPE_1:
holder = ViewHolder_Var1.create(parent, mUserHomeFragment, mUserStreamFragment);
break;
case VersyConstants.HOLDER_TYPE_2:
holder = ViewHolder_Var2.create(parent, mUserHomeFragment, mUserStreamFragment);
break;
case VersyConstants.HOLDER_TYPE_3:
holder = ViewHolder_Var3.create(parent, mUserHomeFragment, mUserStreamFragment);
L.i(getClass().getSimpleName(), "HOLDER 3");
break;
case VersyConstants.HOLDER_TYPE_4:
holder = ViewHolder_Var4.create(parent, mUserHomeFragment, mUserStreamFragment);
L.i(getClass().getSimpleName(), "HOLDER 4");
break;
case VersyConstants.HOLDER_TYPE_5:
holder = ViewHolder_Var5.create(parent, mUserHomeFragment, mUserStreamFragment);
L.i(getClass().getSimpleName(), "HOLDER 5");
break;
case VersyConstants.HOLDER_TYPE_6:
holder = ViewHolder_Var6.create(parent, mUserHomeFragment, mUserStreamFragment);
L.i(getClass().getSimpleName(), "HOLDER 6");
break;
case VersyConstants.HOLDER_TYPE_7:
holder = ViewHolder_Var7.create(parent, mUserHomeFragment, mUserStreamFragment);
L.i(getClass().getSimpleName(), "HOLDER 7");
break;
case VersyConstants.HOLDER_TYPE_8:
holder = ViewHolder_Var8.create(parent, mUserHomeFragment, mUserStreamFragment);
L.i(getClass().getSimpleName(), "HOLDER 8");
break;
case VersyConstants.HOLDER_TYPE_9:
holder = ViewHolder_Var9.create(parent, mUserHomeFragment, mUserStreamFragment);
break;
case VersyConstants.HOLDER_TYPE_10:
holder = ViewHolder_Var10.create(parent, mThumbnailViewToLoaderMap, mUserHomeFragment, mUserStreamFragment);
}
return holder;
}
Проблема в том, что у меня возникает, когда я прокручиваю свой вид ресайклера вниз, и, например, держатель представления 3 создается для 1-го элемента и 5-го элемента, когда я прокручиваю обратно вверх до элемента №. 1, он переработал держатель представления из 5-го элемента, который, как я знаю, является идеей представления переработчика.
В средствах просмотра я скрываю/показываю текстовые представления, если соответствующие данные поступают в формате JSON. Я показываю хэш-теги, если они есть, поэтому в моем первом пункте ниже:
Затем, когда я прокручиваю вниз до 5-го элемента с тегами (ниже):
Затем, когда я прокручиваю назад до первого элемента, теги добавляются, когда они не должны быть, поскольку с этим объектом не связаны данные тега (см. Ниже):
Я отладил, и в данных объекта нет путаницы, нет тегов, добавленных через код, это связано с переработкой recyclerview, оба этих элемента имеют один и тот же держатель представления (держатель представления 3). Есть ли способ предотвратить это?
Ниже приведен метод заполнения тегов. В зависимости от размера списка я устанавливаю видимость текстового представления видимым и заполняю:
protected void populateTags(List<String>tags, TextView[] array){
for(int i=0;i<tags.size(); i++){
array[i].setText(tags.get(i));
array[i].setVisibility(View.VISIBLE);
}
}
Я называю приведенное выше так: List<String> tagsList = feedContent.getTags(); if(tagsList.size>0)populateTags(tagsList, tagsArray);
Это происходит не только с пунктами 1 и 5, это зависит от того, какие представления используются повторно. Если есть представление, повторно используемое для представления, уже отображающего теги, добавляются теги из повторно используемого представления. Это очень плохо