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 使用不同的数据集多次加载recyclerView时出错_Android_Android Recyclerview_Android Seekbar - Fatal编程技术网

Android 使用不同的数据集多次加载recyclerView时出错

Android 使用不同的数据集多次加载recyclerView时出错,android,android-recyclerview,android-seekbar,Android,Android Recyclerview,Android Seekbar,在我的应用程序中,我有一个微调器和一个回收视图。根据微调器中选择的项目,recyclerView中将显示不同的项目列表 最初基于微调器上的项目选择,我在recyclerView中获得了完美的数据。但是,在微调器中更改了4-5次数据并在recyclerView中获取了对应列表后,我的应用程序崩溃,出现以下异常: 例外情况: 我的代码: 您的代码太长,可能需要将其分成若干块,但根据您得到的解释和异常:- 说明:最初基于微调器上的项目选择,I 我在recyclerView中获得了完美的数据。但是4-5

在我的应用程序中,我有一个微调器和一个回收视图。根据微调器中选择的项目,recyclerView中将显示不同的项目列表

最初基于微调器上的项目选择,我在recyclerView中获得了完美的数据。但是,在微调器中更改了4-5次数据并在recyclerView中获取了对应列表后,我的应用程序崩溃,出现以下异常:

例外情况:

我的代码:


您的代码太长,可能需要将其分成若干块,但根据您得到的解释和异常:-

说明:最初基于微调器上的项目选择,I 我在recyclerView中获得了完美的数据。但是4-5次之后 更改微调器中的数据 异常:IndexOutOfBoundsException 这完美地表明您的RecycleView无法再填充数据,传递给它的引用不在已分配的数据绑定范围内。例如,您拥有的数据是20,但传递的引用是25

我建议您使用Log.dData、data.size;要锁定实际数据大小,或使用断点或重构代码,以便我们可以轻松锁定它:


注意。

Hi,大多数情况下在适配器启动后,populateViewHolder中是recyclerView适配器的代码。此问题非常不稳定。它出人意料地出现,而其他时候它不在那里。通常情况下,我以前在列表上有类似的问题。加载和重新加载列表时,列表不断增长,我从未清除适配器数据,因此位置和数据不稳定,我怀疑问题与您的情况相同,我已经指出您只在RecycleView上调用clear,而从不在第一个位置向RecleView提供数据的微调器上调用clear:Try call.clear;而且很可能是这样的;或者在调用后重新加载数据。清除。如果有任何效果,请接受我的回答,以供将来参考和其他面临类似问题的人参考。干杯
      java.lang.IndexOutOfBoundsException: Inconsistency detected. Invalid item position 0(offset:2).state:2
                                                                               at android.support.v7.widget.RecyclerView$Recycler.tryGetViewHolderForPositionByDeadline(RecyclerView.java:5456)
     ArrayAdapter<String> spinnerAdapter=new ArrayAdapter<String>(getActivity(), android.R.layout.simple_spinner_item,dcuName);
        dcuSpinner.setAdapter(spinnerAdapter);

        final LinearLayoutManager llm = new LinearLayoutManager(getActivity());
        slcList = (RecyclerView)v.findViewById(R.id.addedSlcList);
        handleDCURequest = new handleDCURequest();

        dcuSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
            @Override
            public void onItemSelected(AdapterView<?> parent, final View view, final int position, long id)
            {
                Query refQuery1 =  ref.orderByChild("name").equalTo(dcuName.get(position));
                refQuery1.addChildEventListener(new ChildEventListener() {
                    @Override
                    public void onChildAdded(DataSnapshot dataSnapshot, String s)
                    {
                        slcList.getRecycledViewPool().clear();

                        Log.d("SpinnerAdd2", dataSnapshot.getKey());
                        dcuIDVal = dataSnapshot.getKey();
                        adapter = new FirebaseRecyclerAdapter<slcObject, viewHolder>(slcObject.class,  R.layout.single_slc_row,
                                viewHolder.class,FirebaseDatabase.getInstance().getReference().child("JSON").child("StreetLightcontrol").child( dataSnapshot.getKey()).child("DeviceList")) {
                            @Override
                            protected void populateViewHolder(final viewHolder viewHolder, slcObject model, int position)
                            {
                                //expand collapse
//
                                viewHolder.vis.setOnClickListener(new View.OnClickListener() {
                                    @Override
                                    public void onClick(View v)
                                    {
                                        // ViewAnimationsUtils.expand(viewHolder.inv);
                                        viewHolder.collapse.setVisibility(View.VISIBLE);
                                        viewHolder.inv.setVisibility(View.VISIBLE);

                                    }
                                });
                                viewHolder.collapse.setOnClickListener(new View.OnClickListener() {
                                    @Override
                                    public void onClick(View v)
                                    {
                                        // ViewAnimationsUtils.collapse(inv);
                                        viewHolder.inv.setVisibility(View.GONE);
                                        viewHolder.collapse.setVisibility(View.GONE);
                                    }
                                });
                                final String slcIDVal= adapter.getRef(viewHolder.getAdapterPosition()).getKey();
                                viewHolder.name.setText(model.getName());

                                viewHolder.onOff.setClickable(false);
                                viewHolder.onOff.setOnClickListener(new View.OnClickListener() {
                                    @Override
                                    public void onClick(View v)
                                    {
                                        if(viewHolder.onOff.isChecked())
                                        {
                                            viewHolder.onOff.setChecked(false);
                                            handleDCURequest.slc_onoff((Context)myContext,1, slcIDVal,dcuIDVal, viewHolder.onOff, viewHolder.dimming);
                                           //Toast.makeText(myContext,"Turned On",Toast.LENGTH_LONG).show();
                                        }
                                        else
                                        {
                                            viewHolder.onOff.setChecked(true);
                                            handleDCURequest.slc_onoff((Context)myContext,0, slcIDVal,dcuIDVal, viewHolder.onOff,viewHolder.dimming);
                                           // Toast.makeText(myContext,"Turned Off",Toast.LENGTH_LONG).show();
                                        }
                                    }
                                    });

                                viewHolder.dimming.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {

                                    int originalProgress;
                                    @Override
                                    public void onStopTrackingTouch(SeekBar seekBar)
                                    {
                                        if(seekBar.isShown()) {
                                            viewHolder.dimming.setEnabled(false);
                                            handleDCURequest.slc_dimming((Context) myContext, slcIDVal, seekBar.getProgress(), originalProgress, dcuIDVal, viewHolder.dimming);
//
                                        }
                                    }

                                    @Override
                                    public void onStartTrackingTouch(SeekBar seekBar) {
                                        originalProgress = seekBar.getProgress();
                                    }

                                    @Override
                                    public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
                                        if(viewHolder.getAdapterPosition()!=RecyclerView.NO_POSITION)
                                        {
                                            if(seekBar.isShown() && fromUser)
                                            {
//                                                progress= (progress/10)*10;
//                                                //ProgressUtil.showProgressDialog(progressDialog);
//                                                Log.d("Seek", String.valueOf(progress));
//                                                viewHolder.dimming.setEnabled(false);
//                                                handleDCURequest.slc_dimming((Context)myContext,slcIDVal,progress, originalProgress,dcuIDVal,viewHolder.dimming);
//                                                //adapter.getRef(viewHolder.getAdapterPosition()).child("Percentage").setValue(progress);

                                                //viewHolder.showProgress.setText(progress+"%");
                                            }
                                        }



                                    }
                                });

                                viewHolder.edit.setOnClickListener(new View.OnClickListener() {
                                                                       @Override
                                                                       public void onClick(View v) {
                                                                           final Dialog dialog = new Dialog(myContext);
                                                                           dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
                                                                           dialog.setContentView(R.layout.update_slc);
                                                                           dialog.setCancelable(false);
                                                                           Window window = dialog.getWindow();
                                                                           if (window == null) return;
                                                                           WindowManager.LayoutParams lp = new WindowManager.LayoutParams();
                                                                           lp.copyFrom(dialog.getWindow().getAttributes());
                                                                           lp.width = WindowManager.LayoutParams.MATCH_PARENT;
                                                                           lp.height = WindowManager.LayoutParams.WRAP_CONTENT;
                                                                           lp.gravity = Gravity.CENTER;
                                                                           dialog.getWindow().setAttributes(lp);
                                                                           final EditText name = (EditText) dialog.findViewById(R.id.slcNameu);
                                                                           final EditText lat = (EditText) dialog.findViewById(R.id.slcLatu);
                                                                           final EditText lng = (EditText) dialog.findViewById(R.id.slcLngu);
                                                                           final EditText note = (EditText) dialog.findViewById(R.id.slcNoteu);
                                                                           final EditText id = (EditText) dialog.findViewById(R.id.slcIDu);
                                                                           TextView cancel = (TextView) dialog.findViewById(R.id.cancelu);
                                                                           TextView update = (TextView) dialog.findViewById(R.id.updateSlc);
                                                                           update.setOnClickListener(new View.OnClickListener() {
                                                                               @Override
                                                                               public void onClick(View v) {
                                                                                   final String oldSlcIDVal= adapter.getRef(viewHolder.getAdapterPosition()).getKey();
                                                                                   Map mParent = new HashMap();
                                                                                   mParent.put("name",name.getText().toString());
                                                                                   mParent.put("lat",lat.getText().toString());
                                                                                   mParent.put("log",lng.getText().toString());
                                                                                   mParent.put("note",note.getText().toString());


//
                                                                               }
                                                                           });
                                                                           cancel.setOnClickListener(new View.OnClickListener() {
                                                                               @Override
                                                                               public void onClick(View v)
                                                                               {
                                                                                   dialog.dismiss();
                                                                               }
                                                                           });
                                                                       }
                                                                   });


                                        viewHolder.delete.setOnClickListener(new View.OnClickListener() {
                                    @Override
                                    public void onClick(View v)
                                    {
                                        final Dialog dialog = new Dialog(myContext);
                                        dialog.setTitle("Delete Slc?");
                                        dialog.setContentView(R.layout.delete_slc);
                                        dialog.setCancelable(false);
                                        Window window = dialog.getWindow();
                                        if(window == null) return;
                                        WindowManager.LayoutParams lp = new WindowManager.LayoutParams();
                                        lp.copyFrom(dialog.getWindow().getAttributes());
                                        lp.width = WindowManager.LayoutParams.MATCH_PARENT;
                                        lp.height = WindowManager.LayoutParams.WRAP_CONTENT;
                                        lp.gravity = Gravity.CENTER;
                                        dialog.getWindow().setAttributes(lp);
                                        TextView delete = (TextView)dialog.findViewById(R.id.deleteSlc);
                                        final String key= adapter.getRef(viewHolder.getAdapterPosition()).getKey();
                                        delete.setOnClickListener(new View.OnClickListener() {
                                            @Override
                                            public void onClick(View v)
                                            {
                                                // int pos = viewHolder.getAdapterPosition();
                                                Log.d("positionVal",viewHolder.getAdapterPosition()+"");
                                                handleDCURequest.delete_slc((Context)myContext,slcIDVal,viewHolder.getAdapterPosition(), dcuIDVal,adapter);

                                                dialog.dismiss();
                                            }
                                        });


                                        TextView dialogButton = (TextView) dialog.findViewById(R.id.canceld);
                                        // if button is clicked, close the custom dialog
                                        dialogButton.setOnClickListener(new View.OnClickListener() {
                                            @Override
                                            public void onClick(View v)
                                            {
                                                dialog.dismiss();
                                            }
                                        });

                                        dialog.show();

                                    }
                                });
                            }
                        };
                        slcList.setLayoutManager(llm);
                        adapter.notifyDataSetChanged();
                        slcList.setAdapter(adapter);


                    }