【发布时间】:2017-01-04 03:34:03
【问题描述】:
在具有多个布局的 Recyclerview 中,我重写了 getItemViewType() 方法,通过该方法我决定要显示哪个布局。滚动重复项目时出现奇怪的问题并改变它们的位置。
当我根据位置对事物进行硬编码时,没有像下面的代码示例那样重复。
@Override
public int getItemViewType (int position)
{
switch (position)
{
case 0:
return TYPE_HEADER;
case 8:
return TYPE_HEADER;
default:
return TYPE_ITEMS;
}
}
但是当我像下面的代码一样更改它并使其成为动态而不是静态位置时,重复的开始。
String tempDate = "";
List<String> items = new ArrayList<>();
items.add("2017-01-01");
items.add("2017-01-01");
items.add("2017-01-02");
items.add("2017-01-02");
items.add("2017-01-02");
items.add("2017-01-03");
items.add("2017-01-03");
items.add("2017-01-03");
items.add("2017-01-04");
@Override
public int getItemViewType (int position)
{
if(!tempDate.equalsIgnoreCase(items.get(position)){
tempDate = items.get(position);
return TYPE_HEADER;
} else{
tempDate = items.get(position);
return TYPE_ITEMS;
}
@Override
public void onBindViewHolder(RecyclerView.ViewHolder viewHolder, int i) {
switch (viewHolder.getItemViewType()) {
case TYPE_HEADER:
//Make your header view visible
initialize the view resources of HeaderLayout xml
break;
case TYPE_ITEM:
//Make your second header view visible
initialize the view resources of ItemLayout xml
break;
}
}
据我所知,onBindViewHolder()、onCreateViewHolder() 的其他方法都很好。任何帮助表示赞赏。
【问题讨论】:
-
我不确定这是否相关,但您的 getItemViewType() 有问题。
tempDate = items.get(position);在 if 语句中并且未被使用。另外,您是否更新过列表或者它是静态的(或者在创建适配器后没有更新)? -
很难帮助,缺少重要的代码部分
-
@DoronYakovlev-Golani 是的,它是静态列表,我也在寻找 getItemViewType() 出现问题的原因。 tempDate = items.get(position);很好的说法。
-
@Manza 你还需要什么。告诉我。
-
@NareshSharma,您如何使用 tempDate?您对操作顺序的假设可能是错误的。
标签: android android-recyclerview