在我的适配器中,我使用getItemViewType根据值来决定将头和搜索指示器添加到recyclerview。
getItemViewType
private static final int TYPE_SEARCH = 0;
private static final int TYPE_HEADER = 1;
private static final int TYPE_CELL = 2;
@Override
public int getItemViewType(int position) {
if (position == 0) {
return TYPE_HEADER;
}
else if(position == 1) {
return TYPE_SEARCH;
}
else
return TYPE_CELL;
}
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
final View convertView;
switch (viewType) {
case 0:
convertView = LayoutInflater.from(parent.getContext()).inflate(R.layout.card_search_ind, parent, false);
return new Adapter.ViewHolderSearch(convertView);
case 1:
convertView = LayoutInflater.from(parent.getContext()).inflate(R.layout.card_header, parent, false);
return new Adapter.ViewHolderHeader(convertView);
case 2:
convertView = LayoutInflater.from(parent.getContext()).inflate(R.layout.card_normal_layout, parent, false);
return new Adapter.ViewHolderFeed(convertView);
}
return null;
}
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
....
}
因此,如果位置为0,它将膨胀并返回标题布局卡,如果位置为1,它将膨胀并返回搜索布局卡,否则只返回“正常布局”。现在发生的事情似乎是标题和搜索“标题”正在使用Dog10和Dog9应该去的两个空格。所以现在我的recyclerview feed从Dog8开始。如果我删除了两个“标题”,我的recyclerview Feed将从Dog10开始。请参阅下面的图片,了解我在说什么。
Image of my app RecyclerView feed
我如何解决这个问题?我应该只为从mysql返回的数据添加两个虚拟条目。
答案 0 :(得分:0)
您可以为列表添加虚拟条目。但请确保onBindViewHolder()不会绑定位置0和1。
答案 1 :(得分:0)
是的,你可以在索引0和1处添加两个对象。如果你将属性(实例变量)作为viewType,那么你的适配器并不关心你想要显示标题和搜索的位置。然后使用“搜索”和“标题”类型添加虚拟数据,并将默认类型设置为“项目”单元格。希望它能清除你所有的疑虑。
true