繁体   English   中英

onBindViewHolder 方法有什么问题

[英]What is the wrong with onBindViewHolder method

我用onBindViewHolder在我CardAdapter 它包括一个checkedTextViewonClick方法。我试图获取这些文本并放入Arraylist(sharedP) 但是ArrayList只返回最后一个元素。 我的错在哪里?

public void onBindViewHolder(@NonNull final CardTasarimTutucu holder, int position) {

        SharedPreferences sp = mContext.getSharedPreferences("checked",Context.MODE_PRIVATE);

        e=sp.edit();
        sharedP= new ArrayList<>();
        word = words.get(position).getMean();
        Log.e("getMean",word);
        id= words.get(position).getId();
        str= new StringBuffer("");

        holder.rowText.setText(word);
        holder.rowText.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                if (holder.rowText.isChecked()) {

                    sharedP.remove(sharedP.indexOf(word));
                    flag=false;
                    holder.rowText.setCheckMarkDrawable(null);
                    holder.rowText.setChecked(false);

                } else {

                    sharedP.add(word);
                    flag=true;
                    Log.e("deneme",word);
                    holder.rowText.setCheckMarkDrawable(R.drawable.ic_check_black_24dp);
                    holder.rowText.setChecked(true);

                }

                str.delete(0,str.length());
                for(int i=0;i<sharedP.size();i++){
                    Log.e("sharedpreference1",sharedP.get(i).toString());
                    str.append(sharedP.get(i));
                    str.append(".");

                }
                if(flag==false){
                    e.remove("str");
                    e.commit();
                }
                Log.e("size",str.toString());
                e.putString("str", str.toString());
                e.remove("set");

                e.commit();

            }

        });




    }

checkTextView 的例子

共享偏好

首先onBindViewHolder是对RecyclerView中的每一个 item 进行调用, onBindViewHolder是为了显示 view item 中每个位置的数据。 所以它就像一个循环。 在您的代码中,您在onBindViewHolder sharedP= new ArrayList<>();初始化sharedP数组sharedP= new ArrayList<>(); . 因此,对于您通过 / scroll 的每个项目,数组将再次初始化,而前一个项目正在丢失。换句话说,当您到达列表末尾时,您的列表中将只有 1 个项目,即最后一个。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM