Recycler查看getItemViewType位置问题

时间:2018-03-05 12:01:02

标签: java android-recyclerview android-adapter

在我的适配器中,我使用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返回的数据添加两个虚拟条目。

2 个答案:

答案 0 :(得分:0)

您可以为列表添加虚拟条目。但请确保onBindViewHolder()不会绑定位置0和1。

答案 1 :(得分:0)

是的,你可以在索引0和1处添加两个对象。如果你将属性(实例变量)作为viewType,那么你的适配器并不关心你想要显示标题和搜索的位置。然后使用“搜索”和“标题”类型添加虚拟数据,并将默认类型设置为“项目”单元格。希望它能清除你所有的疑虑。

true