Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/204.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
Android 分段回收视图_Android_Android Recyclerview_Adapter - Fatal编程技术网

Android 分段回收视图

Android 分段回收视图,android,android-recyclerview,adapter,Android,Android Recyclerview,Adapter,我正在尝试实现一个包含章节和副标题的recyclerview。我在Github上找到了一个很好的类,但在实现它时遇到了一些问题。基本上,当我使用常规的recyclerview适配器而不是示例时,每个节头都会替换我的recyclerview的一个元素 比如说。假设我在我的recyclerview中有5张卡片(5种配料,因为它是一个烹饪应用程序),但在添加了2个标题后,现在我只剩下3张卡片,其中第一张和第四张被副标题替换。我希望这是有道理的。此外,我的卡位置也乱七八糟,当我滚动到recyclervi

我正在尝试实现一个包含章节和副标题的recyclerview。我在Github上找到了一个很好的类,但在实现它时遇到了一些问题。基本上,当我使用常规的recyclerview适配器而不是示例时,每个节头都会替换我的recyclerview的一个元素

比如说。假设我在我的recyclerview中有5张卡片(5种配料,因为它是一个烹饪应用程序),但在添加了2个标题后,现在我只剩下3张卡片,其中第一张和第四张被副标题替换。我希望这是有道理的。此外,我的卡位置也乱七八糟,当我滚动到recyclerview的底部时,应用程序就会崩溃。我附加了几行代码,希望有人能给我指出正确的方向。与Mariotti的示例相比,我基本上只是使用自己的适配器,而不是“simpleadapter.java”类:

公共类RecycleServiceAdapter扩展了RecyclerView.Adapter{
私人清单项目清单;
private final String TAG=OrderFragment.class.getSimpleName();
私人语境;
公共RecycleServiceAdapter(上下文上下文,列表项列表){
this.itemList=itemList;
this.context=上下文;
}
公共类RecyclerViewHolder扩展了RecyclerView.ViewHolder{
公共回收服务所有者(查看项目视图){
超级(项目视图);
}
}
公共类InCreditViewHolder扩展了RecycleServiceWholders{
公共文本视图IngCreditName;
公共图像查看用户照片;
公共图像按钮信息BTN;
公共按钮调节器;
公共按钮外接;
公共图像视图soldOutPhoto;
公共图像视图;
私人语境;
公共InCreditViewHolder(查看项目视图){
超级(项目视图);
ingredientName=(TextView)itemView.findViewById(R.id.name);
ingredientPhoto=(ImageView)itemView.findViewById(R.id.photo);
infoBtn=(ImageButton)itemView.findViewById(R.id.info);
regularBtn=(按钮)itemView.findViewById(R.id.regular);
extraBtn=(按钮)itemView.findViewById(R.id.extra);
soldOutPhoto=(ImageView)itemView.findViewById(R.id.sell_out);
grayOutPhoto=(ImageView)itemView.findViewById(R.id.gray\u out);
}
}
@凌驾
public RecycleServiceWholders onCreateViewHolder(视图组父级,int-viewType){
View layoutView=LayoutFlater.from(parent.getContext()).inflate(R.layout.component,null);
返回新的InCreditViewHolder(片段,布局视图);
}
@凌驾
BindViewHolder上的公共无效(RecyclerViewHolder,最终int pos){
IngCreditViewHolder=(IngCreditViewHolder)viewHolder;
最终int位置=holder.getAdapterPosition();
最终字符串名称=itemList.get(position.getName();
if(MainActivity.order.get(position)==1){
所选的固定器常规BTN设置(正确);
所选的持有者外部BTN设置(假);
}else if(MainActivity.order.get(position)==2){
所选的固定器常规BTN设置(假);
选择的持有者外部BTN设置(真);
}否则{
所选的固定器常规BTN设置(假);
所选的持有者外部BTN设置(假);
}
holder.IngreditName.setText(itemList.get(position.getName());
}
@凌驾
public int getItemCount(){
返回此.itemList.size();
}
}
下面是我在片段中如何称呼这个recyclerview的:

        final RecyclerView rView = (RecyclerView) v.findViewById(R.id.recycler_view);
    rView.setHasFixedSize(true);
    rView.setLayoutManager(new GridLayoutManager(getActivity(), 3));

    //Your RecyclerView.Adapter
    RecyclerView.Adapter rcAdapter = new RecyclerViewAdapter(getActivity(),  visibleIngredients);
    //This is the code to provide a sectioned grid
    List<SectionedGridRecyclerViewAdapter.Section> sections =
            new ArrayList<SectionedGridRecyclerViewAdapter.Section>();

    //Sections
    sections.add(new SectionedGridRecyclerViewAdapter.Section(0,"Spreads"));
    sections.add(new SectionedGridRecyclerViewAdapter.Section(2,"Liquid"));

    //Add your adapter to the sectionAdapter
    SectionedGridRecyclerViewAdapter.Section[] dummy = new SectionedGridRecyclerViewAdapter.Section[sections.size()];
    SectionedGridRecyclerViewAdapter mSectionedAdapter = new
            SectionedGridRecyclerViewAdapter(getActivity(),R.layout.section,R.id.section_text,rView,rcAdapter);
    mSectionedAdapter.setSections(sections.toArray(dummy));

    //Apply this adapter to the RecyclerView
    rView.setAdapter(mSectionedAdapter);
final RecyclerView rView=(RecyclerView)v.findViewById(R.id.recycler\u视图);
rView.setHasFixedSize(真);
setLayoutManager(新的GridLayoutManager(getActivity(),3));
//你的RecyclerView.适配器
RecyclerView.Adapter rcAdapter=新的RecyclerViewAdapter(getActivity(),VisibleComponents);
//这是提供分段网格的代码
列出章节=
新的ArrayList();
//部分
增加(新章节EdGridRecycleServiceAdapter.章节(0,“差价”);
增加(新章节EdGridRecycleServiceAdapter.章节(2,“液体”);
//将适配器添加到sectionAdapter
SectionEdGridRecycleServiceAdapter.Section[]伪=新SectionEdGridRecycleServiceAdapter.Section[sections.size()];
SectionEdGridRecycleServiceAdapter mSectionedAdapter=新建
SectionEdGridRecycleServiceAdapter(getActivity(),R.layout.section,R.id.section\u text,rView,rcAdapter);
mSectionedAdapter.setSections(sections.toArray(虚拟));
//将此适配器应用于RecyclerView
rView.setAdapter(mSectionedAdapter);

解决了这个问题。看起来该位置已关闭,因为在onBindViewHolder中,我使用了以下行:

final int position = holder.getAdapterPosition();

一旦我忽略了这一点,使用函数返回的位置,一切都很好。

解决了问题。看起来该位置已关闭,因为在onBindViewHolder中,我使用了以下行:

final int position = holder.getAdapterPosition();

有一次我忽略了这一点,而是使用函数返回的位置,这一切都很好。

发布stacktrace发布stacktrace