[英]Recycler View getItemViewType position issue
在我的适配器内部,我使用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提要从Dog8开始。 如果删除两个“标题”,则我的recyclerview feed从Dog10开始。 请看下面的图片以理解我的意思。
我该如何解决? 我应该只将两个虚拟条目添加到从mysql返回的数据中。
您可以为列表添加虚拟条目。 但是请确保onBindViewHolder()不绑定位置0和1。
是的,您可以在索引0和1处添加两个对象。如果将属性(实例变量)作为viewType,也可以更好,这样适配器就不必在意标题和搜索的位置了。 然后使用“搜索”和“标题”添加您的虚拟数据,并将默认类型指定为“项目”单元格。 希望它将清除您的所有疑问。
@Override
public int getItemViewType(int position) {
return data.get(position).getViewType();
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.