Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/215.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从RecyclerView中删除与列表不关联的视图_Java_Android_View_Android Recyclerview - Fatal编程技术网

Java 从RecyclerView中删除与列表不关联的视图

Java 从RecyclerView中删除与列表不关联的视图,java,android,view,android-recyclerview,Java,Android,View,Android Recyclerview,我有两种类型的RecycleServiceAdapterItemViewHolder用于ArrayList中的所有项目视图,而headerviewwholder用于一个headerView。我可以从ArrayList中删除项,然后使用notifyItemRemoved(position)从RecyclerView中删除项视图。但是如何删除与ArrayList不关联的headerView 下面是来自RecycleServiceAdapter的一些代码: private static final i

我有两种类型的
RecycleServiceAdapter
ItemViewHolder
用于
ArrayList
中的所有项目视图,而
headerviewwholder
用于一个headerView。我可以从
ArrayList
中删除项,然后使用
notifyItemRemoved(position)
RecyclerView
中删除项视图。但是如何删除与
ArrayList
不关联的headerView

下面是来自
RecycleServiceAdapter
的一些代码:

private static final int TYPE_HEADER = 0;
private static final int TYPE_ITEM = 1;
private List<Offer> mValues;
OfferListAdapter(List<String> items) {
        mValues = items;
    }

    @Override
    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        if (viewType == TYPE_ITEM) {
            View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.itemView, parent, false);
            return new ItemViewHolder(v);
        } else if (viewType == TYPE_HEADER) {
            View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.headerView, parent, false);
            return new HeaderViewHolder(v);
        }
        return null;
    }

    @Override
    public void onBindViewHolder(final RecyclerView.ViewHolder holder, int position) {
        if (holder instanceof ItemViewHolder) {
            ItemViewHolder userViewHolder = (ItemViewHolder) holder;
        } else if (holder instanceof HeaderViewHolder) {
             HeaderViewHolder headerViewHolder= (HeaderViewHolder) holder;
        }
    }

    @Override
    public int getItemViewType(int position) {
        if (isPositionHeader(position))
            return TYPE_HEADER;

        return TYPE_ITEM;
    }

    private boolean isPositionHeader(int position) {
        return position == 0;
    }

    private Offer getItem(int position) {
        return mValues.get(position - 1);
    }

    @Override
    public int getItemCount() {
        return mValues.size() + 1;
    }
private static final int TYPE_HEADER=0;
私有静态最终整数类型\ u项=1;
私有列表价值;
OfferListAdapter(列表项){
M值=项目;
}
@凌驾
public RecyclerView.ViewHolder onCreateViewHolder(视图组父级,int-viewType){
if(viewType==类型\项){
视图v=LayoutInflater.from(parent.getContext()).flate(R.layout.itemView,parent,false);
返回新的ItemViewHolder(v);
}else if(viewType==类型\标题){
视图v=LayoutInflater.from(parent.getContext()).flate(R.layout.headerView,parent,false);
返回新的HeaderViewHolder(v);
}
返回null;
}
@凌驾
public void onBindViewHolder(final RecyclerView.ViewHolder,int位置){
if(项目视图持有者的持有者实例){
ItemViewHolder userViewHolder=(ItemViewHolder)holder;
}else if(头枕支架实例){
头枕头枕=(头枕)支架;
}
}
@凌驾
public int getItemViewType(int位置){
if(isPositionHeader(位置))
返回类型_头;
返回类型\ U项目;
}
专用布尔值isPositionHeader(int位置){
返回位置==0;
}
私人报价getItem(内部位置){
返回mValues.get(位置-1);
}
@凌驾
public int getItemCount(){
返回mValues.size()+1;
}
至少从适配器的角度来看,HeaderView是列表的一部分

您说
isPositionHeader(pos->pos==0)
表示列表的第一项是标题视图,并告诉适配器您的列表中有
mValues.size()+1
项。用
+1
来弥补先到的页眉

那么,您如何再次删除此视图


如果你想打开/关闭它…你需要一些可以在状态之间切换的东西。为什么不使用
布尔值
?您可以使用一些
isShowingHeader
字段来指示是否显示标题

这将如何影响您的代码?嗯…和上面一样的代码

// if we show the header, the 0 position is the header
isPositionHeader(pos -> isShowingHeader && pos == 0)
对于您的列表大小

// list is longer by 1 when showing a header
mValues.size() + (isShowingHeader ? 1 : 0)

显示/隐藏标题时,您现在只需更新
isShowingHeader
并调用
notifyDataSetChanged()
通知适配器您更改的值。

您又一次让我开心了