java - onBindViewHolder 方法有什么问题

标签 java android sharedpreferences

我在 CardAdapter 中使用 onBindViewHolder。它包括 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();

            }

        });




    }

example of checkedTextView

shared preference

最佳答案

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

关于java - onBindViewHolder 方法有什么问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59438483/

相关文章:

android - 应该使用什么用户身份来整理来自 Google Play 的应用内购买?

android - 奇怪的 RecyclerView 复选框 onCheckChanged 行为

android - 如果 Facebook Conceal 仅将 key 存储在 SharedPreferences 中,它如何保证安全?

android - 从 getSharedPreferences(自定义文件)迁移到 getDefaultSharedPreferences()

java - Play WSResponse 没有来自 WSRequest 的 cookie 或 header

java - @EJB 从不同的 jar 注入(inject)

java - 拳击什么的。绘制矩形相关

Java 8 下界通配符

android - 插入电源时如何使Android设备启动?

Android:根据用户是否登录更改 Activity 启动我的应用程序?