如何在适配器recyclerview中使用两个arraylist

如何解决如何在适配器recyclerview中使用两个arraylist

我想在同一适配器中使用两个arraylist,但出现错误。它没有设置值,我得到了INDEX OUT BOUND EXPECTION

这是我的适配器代码:

public class packagingProductAdapter extends RecyclerView.Adapter<packagingProductAdapter.ViewHolder> {

    private List<packingProductPOJO> list_data;
   // private List<packingProductPOJO> testPOJO;

    private List<testPOJO> test_POJO;

  //  private packingProduct context;
    private testClass context;
    String product_id,category_id,quantity = "0",sizeValue = "0";
    private static int _value = 0;
    PrefManager prefManager;
    ProgressLoader progressLoader;
/*
    public packagingProductAdapter(List<packingProductPOJO> list_data,List<testPOJO> testPOJO,packingProduct context) {
        this.list_data = list_data;
        this.test_POJO = testPOJO;
        this.context = context;
        prefManager = new PrefManager(context);
        progressLoader = new ProgressLoader(context);

    } */

    public packagingProductAdapter(List<packingProductPOJO> list_data,List<testPOJO> test_POJO,testClass context) {
        this.list_data = list_data;
        this.test_POJO = test_POJO;
        this.context = context;
        prefManager = new PrefManager(context);
        progressLoader = new ProgressLoader(context);

    }

    @Override
    public packagingProductAdapter.ViewHolder onCreateViewHolder(ViewGroup parent,int viewType) {

        View view= LayoutInflater.from(parent.getContext()).inflate(R.layout.packing_product_cart_view_row,parent,false);
        return new packagingProductAdapter.ViewHolder(view);

    }


    @Override
    public void onBindViewHolder(final packagingProductAdapter.ViewHolder holder,final int position){
        final packingProductPOJO listData = list_data.get(position);
        final testPOJO test_POJO1 = test_POJO.get(position);
        holder.setIsRecyclable(false);

            if (test_POJO.equals("null")){

            holder.linearLayout.setVisibility(View.GONE);

        }else
            {

                holder.linearLayout.setVisibility(View.VISIBLE);
                holder.heading.setText(test_POJO1.getContact_name());
             //   holder.linearLayout.setBackgroundResource((R.drawable.rectangleborder));

            }



        holder.produt_quantity.setText("=  " +listData.getQuantity() );

        if (listData.getProductPdf().equals("null")) {

            holder.product_name.setText(listData.getCat_name());

        }else {

            holder.product_name.setText("DOWNLOAD PDF");

        }



        // holder.heading.setText(listData.getImage());
        product_id = listData.getProductid();
        category_id = listData.getImage();
        holder.purchaseQty.setText(listData.getUser_quantity());
        holder.pro_price.setText("Rs. " +listData.getPrice());

        final String finalPro_qty = "0";
        final String finalProduct_ID = product_id;


        holder.count_up.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {


                String removeProductId = listData.getId();
                String removeQuantity = listData.getUser_quantity();
                int quantity = 0;
                try{

                   quantity  = Integer.parseInt(removeQuantity) + 1;

                } catch(NumberFormatException ex){ // handle your exception

                    ex.printStackTrace();
                }


                if (quantity > Integer.parseInt(listData.getQuantity())){

                    Toast.makeText(context,"Insufficent Stock ",Toast.LENGTH_LONG).show();

                }else {
               //     context.add("pk@gmail.com",String.valueOf(quantity),finalProduct_ID,"manual",holder.purchaseQty,position,"0");

                }

            }
        });

        holder.count_down.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                String removeProductId = listData.getId();
                String removeQuantity = listData.getUser_quantity();
                final int quantity = Integer.valueOf(removeQuantity) - 1;
             //   context.add("pk@gmail.com","0");


            }
        });


        holder.purchaseQty.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                // get alert_dialog.xml view
                LayoutInflater li = LayoutInflater.from(context);
                View promptsView = li.inflate(R.layout.alert_dialog,null);

                AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(
                        context);

                // set alert_dialog.xml to alertdialog builder
                alertDialogBuilder.setView(promptsView);

                final EditText userSize = (EditText) promptsView.findViewById(R.id.etUserInput);
                final TextView enterQuantity = promptsView.findViewById(R.id.enterQuantity);



                // set dialog message
                alertDialogBuilder
                        .setCancelable(false)
                        .setPositiveButton("OK",new DialogInterface.OnClickListener() {
                            public void onClick(DialogInterface dialog,int id) {

                                //  Toast.makeText(context,"Entered: "+userInput.getText().toString(),Toast.LENGTH_LONG).show();
                                final String quantityValue = (userSize.getText().toString());
                                if (TextUtils.isEmpty(quantityValue)) {
                                    userSize.setError("Quantity cannot be Empty");
                                    Toast.makeText(context,"Quantity cannot be Empty",Toast.LENGTH_LONG).show();
                                    userSize.requestFocus();
                                    return;
                                }
                                final int quantity = Integer.valueOf(quantityValue);

                                if (quantity > Integer.parseInt(listData.getQuantity())){

                                    Toast.makeText(context,Toast.LENGTH_LONG).show();

                                }else {

                                //    context.add("pk@gmail.com",sizeValue);
                                }

                            }
                        })
                        .setNegativeButton("Cancel",new DialogInterface.OnClickListener() {
                                    public void onClick(DialogInterface dialog,int id) {
                                        dialog.cancel();
                                    }
                                });

                // create alert dialog
                AlertDialog alertDialog = alertDialogBuilder.create();

                // show it
                alertDialog.show();


            }
        });

    }

    @Override
    public int getItemCount() {
        return  list_data.size()  + test_POJO.size();
    }



    public class ViewHolder extends RecyclerView.ViewHolder{
        private CardView cardView;
        private TextView purchaseQty,product_name,produt_quantity,heading,pro_price;
        private ImageView     count_up,count_down;
        private LinearLayout  topview,userQuantityLayout;
        private LinearLayout linearLayout;
        public ViewHolder(View itemView) {
            super(itemView);
            heading = itemView.findViewById(R.id.heading);
            purchaseQty= itemView.findViewById(R.id.txtItemQty);
            produt_quantity= itemView.findViewById(R.id.total_qty);
            product_name=itemView.findViewById(R.id.pro_name);
            purchaseQty.setText("0");
            count_up =  itemView.findViewById(R.id.count_up);
            count_down =  itemView.findViewById(R.id.count_down);
            pro_price = itemView.findViewById(R.id.pro_price);
            cardView = itemView.findViewById(R.id.packing_card_view);
            cardView.setVisibility(View.VISIBLE);

//            purchaseQty.setBackground(context.getResources().getDrawable(R.drawable.rectangleborder));
            topview = itemView.findViewById(R.id.topview);
            topview.setVisibility(View.GONE);

            linearLayout = itemView.findViewById(R.id.linearheading);

        }
    }
}

这是日志错误

E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.cls.kraftpaper,PID: 24722
    java.lang.IndexOutOfBoundsException: Index: 3,Size: 3
        at java.util.ArrayList.get(ArrayList.java:437)
        at com.kraftpaper.handler.activity.packaging.adapter.packagingProductAdapter.onBindViewHolder(packagingProductAdapter.java:71)
        at com.kraftpaper.handler.activity.packaging.adapter.packagingProductAdapter.onBindViewHolder(packagingProductAdapter.java:27)
        at androidx.recyclerview.widget.RecyclerView$Adapter.onBindViewHolder(RecyclerView.java:7065)
        at androidx.recyclerview.widget.RecyclerView$Adapter.bindViewHolder(RecyclerView.java:7107)
        at androidx.recyclerview.widget.RecyclerView$Recycler.tryBindViewHolderByDeadline(RecyclerView.java:6012)
        at androidx.recyclerview.widget.RecyclerView$Recycler.tryGetViewHolderForPositionByDeadline(RecyclerView.java:6279)
        at androidx.recyclerview.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:6118)
        at androidx.recyclerview.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:6114)
        at androidx.recyclerview.widget.LinearLayoutManager$LayoutState.next(LinearLayoutManager.java:2303)
        at androidx.recyclerview.widget.LinearLayoutManager.layoutChunk(LinearLayoutManager.java:1627)
        at androidx.recyclerview.widget.LinearLayoutManager.fill(LinearLayoutManager.java:1587)
        at androidx.recyclerview.widget.LinearLayoutManager.onLayoutChildren(LinearLayoutManager.java:665)
        at androidx.recyclerview.widget.RecyclerView.dispatchLayoutStep2(RecyclerView.java:4134)
        at androidx.recyclerview.widget.RecyclerView.onMeasure(RecyclerView.java:3540)
        at android.view.View.measure(View.java:24845)
        at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6908)
        at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1552)
        at android.widget.LinearLayout.measureVertical(LinearLayout.java:842)
        at android.widget.LinearLayout.onMeasure(LinearLayout.java:721)
        at android.view.View.measure(View.java:24845)
        at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6908)
        at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1552)
        at android.widget.LinearLayout.measureVertical(LinearLayout.java:842)
        at android.widget.LinearLayout.onMeasure(LinearLayout.java:721)
        at android.view.View.measure(View.java:24845)
        at android.widget.ScrollView.measureChildWithMargins(ScrollView.java:1472)
        at android.widget.FrameLayout.onMeasure(FrameLayout.java:221)
        at android.widget.ScrollView.onMeasure(ScrollView.java:498)
        at android.view.View.measure(View.java:24845)
        at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6908)
        at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1552)
        at android.widget.LinearLayout.measureVertical(LinearLayout.java:842)
        at android.widget.LinearLayout.onMeasure(LinearLayout.java:721)
        at android.view.View.measure(View.java:24845)
        at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6908)
        at android.widget.FrameLayout.onMeasure(FrameLayout.java:221)
        at androidx.appcompat.widget.ContentFrameLayout.onMeasure(ContentFrameLayout.java:143)
        at android.view.View.measure(View.java:24845)
        at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6908)
        at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1552)
        at android.widget.LinearLayout.measureVertical(LinearLayout.java:842)
        at android.widget.LinearLayout.onMeasure(LinearLayout.java:721)
        at android.view.View.measure(View.java:24845)
        at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6908)
        at android.widget.FrameLayout.onMeasure(FrameLayout.java:221)
        at android.view.View.measure(View.java:24845)
        at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6908)
        at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1552)
        at android.widget.LinearLayout.measureVertical(LinearLayout.java:842)
        at android.widget.LinearLayout.onMeasure(LinearLayout.java:721)
        at android.view.View.measure(View.java:24845)
        at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6908)
        at com.android.internal.policy.DecorView.measureChildWithMargins(DecorView.java:3029)
        at android.widget.FrameLayout.onMeasure(FrameLayout.java:221)
        at com.android.internal.policy.DecorView.onMeasure(DecorView.java:863)
        at android.view.View.measure(View.java:24845)
        at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:3218)
        at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:2004)
        at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2296)
        at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1888)
        at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:7908)
        at android.view.Choreographer$CallbackRecord.run(Choreographer.java:1101)
        at android.view.Choreographer.doCallbacks(Choreographer.java:917)
        at android.view.Choreographer.doFrame(Choreographer.java:847)
        at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:1086)
        at android.os.Handler.handleCallback(Handler.java:883)
        at android.os.Handler.dispatchMessage(Handler.java:100)
        at android.os.Looper.loop(Looper.java:230)
        at android.app.ActivityThread.main(ActivityThread.java:7778)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:526)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1034)

在这里,我添加了logcat。我得到的结果在那里。

解决方法

那是因为这段代码:

@Override
public int getItemCount() {
    return  list_data.size()  + test_POJO.size();
}

您将返回两个列表的总和: 例如,假设您要返回:return 3 + 3 // total = 6

但是您也尝试访问以下列表中的单个列表:

@Override
public void onBindViewHolder(final packagingProductAdapter.ViewHolder holder,final int position){
    final packingProductPOJO listData = list_data.get(position); 
    final testPOJO test_POJO1 = test_POJO.get(position); 

当您在列表上滚动6次时,位置将增加,这是两个列表getItemCount()的总和,将拖曳 java.lang.IndexOutOfBoundsException: Index: 3,Size: 3

尝试仅返回列表之一的大小:

@Override
public int getItemCount() {
    return  list_data.size();
}
,

您的getItemCount()方法中的代码是

@Override
public int getItemCount() {
    return  list_data.size()  + test_POJO.size();
}

您返回2个不同的数组大小。 onBindViewHolder()方法具有位置变量。此变量给出项目位置,此位置的范围为 0..getItemCount()

在onBindViewHolder()方法中,您具有以下代码

    final packingProductPOJO listData = list_data.get(position);
    final testPOJO test_POJO1 = test_POJO.get(position);

您的getItemCount()方法返回两个不同数组的大小,但是您尝试访问相同的位置。这是Exception的原因。如果数组大小相同,则可以使用此

@Override
public int getItemCount() {
    return  list_data.size();
}

但如果没有,您可以这样做:

@Override
public int getItemCount() {
    return  Math.max(list_data.size(),test_POJO.size());
}

在onBindViewHolderMethod()

    if (list_data.size() >= position) list_data.get(0);
    else list_data.get(position);

    if (test_POJO.size() >= position) list_data.get(0);
    else test_POJO.get(possition);

但这不是好方法

,

尝试一下。

@Override
public int getItemCount() {
    return  min(list_data.size(),test_POJO.size());
}

它将解决当前问题。但是您会发现RecyclerView中缺少一些数据。

,

如果列表中包含相似的元素,则可以将它们组合在一起,然后将它们用作适配器中的一个列表,这样做将避免各种麻烦。

List<PojoClass> combined = new ArrayList<>();
combined.addAll(firstList);
combined.addAll(secondList);

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


依赖报错 idea导入项目后依赖报错,解决方案:https://blog.csdn.net/weixin_42420249/article/details/81191861 依赖版本报错:更换其他版本 无法下载依赖可参考:https://blog.csdn.net/weixin_42628809/a
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下 2021-12-03 13:33:33.927 ERROR 7228 [ main] o.s.b.d.LoggingFailureAnalysisReporter : *************************** APPL
错误1:gradle项目控制台输出为乱码 # 解决方案:https://blog.csdn.net/weixin_43501566/article/details/112482302 # 在gradle-wrapper.properties 添加以下内容 org.gradle.jvmargs=-Df
错误还原:在查询的过程中,传入的workType为0时,该条件不起作用 &lt;select id=&quot;xxx&quot;&gt; SELECT di.id, di.name, di.work_type, di.updated... &lt;where&gt; &lt;if test=&qu
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct redisServer’没有名为‘server_cpulist’的成员 redisSetCpuAffinity(server.server_cpulist); ^ server.c: 在函数‘hasActiveC
解决方案1 1、改项目中.idea/workspace.xml配置文件,增加dynamic.classpath参数 2、搜索PropertiesComponent,添加如下 &lt;property name=&quot;dynamic.classpath&quot; value=&quot;tru
删除根组件app.vue中的默认代码后报错:Module Error (from ./node_modules/eslint-loader/index.js): 解决方案:关闭ESlint代码检测,在项目根目录创建vue.config.js,在文件中添加 module.exports = { lin
查看spark默认的python版本 [root@master day27]# pyspark /home/software/spark-2.3.4-bin-hadoop2.7/conf/spark-env.sh: line 2: /usr/local/hadoop/bin/hadoop: No s
使用本地python环境可以成功执行 import pandas as pd import matplotlib.pyplot as plt # 设置字体 plt.rcParams[&#39;font.sans-serif&#39;] = [&#39;SimHei&#39;] # 能正确显示负号 p
错误1:Request method ‘DELETE‘ not supported 错误还原:controller层有一个接口,访问该接口时报错:Request method ‘DELETE‘ not supported 错误原因:没有接收到前端传入的参数,修改为如下 参考 错误2:cannot r
错误1:启动docker镜像时报错:Error response from daemon: driver failed programming external connectivity on endpoint quirky_allen 解决方法:重启docker -&gt; systemctl r
错误1:private field ‘xxx‘ is never assigned 按Altʾnter快捷键,选择第2项 参考:https://blog.csdn.net/shi_hong_fei_hei/article/details/88814070 错误2:启动时报错,不能找到主启动类 #
报错如下,通过源不能下载,最后警告pip需升级版本 Requirement already satisfied: pip in c:\users\ychen\appdata\local\programs\python\python310\lib\site-packages (22.0.4) Coll
错误1:maven打包报错 错误还原:使用maven打包项目时报错如下 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources (default-resources)
错误1:服务调用时报错 服务消费者模块assess通过openFeign调用服务提供者模块hires 如下为服务提供者模块hires的控制层接口 @RestController @RequestMapping(&quot;/hires&quot;) public class FeignControl
错误1:运行项目后报如下错误 解决方案 报错2:Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project sb 解决方案:在pom.
参考 错误原因 过滤器或拦截器在生效时,redisTemplate还没有注入 解决方案:在注入容器时就生效 @Component //项目运行时就注入Spring容器 public class RedisBean { @Resource private RedisTemplate&lt;String
使用vite构建项目报错 C:\Users\ychen\work&gt;npm init @vitejs/app @vitejs/create-app is deprecated, use npm init vite instead C:\Users\ychen\AppData\Local\npm-