单击按钮更改回收器视图中的数据

pobjuy32  于 2021-07-08  发布在  Java
关注(0)|答案(1)|浏览(213)

因此,我试图创建一个挑战游戏,你可以有2个选项来选择,我有两个卡在回收视图设置视图设置,我将如何改变他们的价值观,以获得一个新的挑战与点击按钮从主要活动,如果用户想要一个新的挑战?我使用sqlite数据库随机获取每一场战斗的数据。
我的onbindviewholder

@Override
    public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {
        SQLiteDatabase sqLiteDatabase = faceMashDatabaseHelper.getReadableDatabase();
        cursor = sqLiteDatabase.query("images", new String[]{"id","filename","name"},null,null,null,null,null);
        MyViewHolder myViewHolder = (MyViewHolder) holder;
        int position1 = (int)(Math.random()*(faceMashDatabaseHelper.getCount()-0+1)+0);
        cursor.moveToPosition(position1);
        String filename = cursor.getString(cursor.getColumnIndex("filename"));
        String name = cursor.getString(cursor.getColumnIndex("name"));
        CardView cardView = myViewHolder.getCardView();
        ImageView imageView = (ImageView) cardView.findViewById(R.id.imageView);
        TextView nameView = (TextView) cardView.findViewById(R.id.nameView);
        nameView.setText(name);
        File file = context.getFileStreamPath(filename);
        if(file.exists()){
            Bitmap bitmap = BitmapFactory.decodeFile(file.getAbsolutePath());
            imageView.setImageBitmap(bitmap);

        }
        cardView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                String name = nameView.getText().toString();
                listener.onClick(position,name);
            }
        }); //This on click is for the card views themselves.

    }

我的onclick在当前时刻,我正在使用一个工具栏选项

case R.id.newbattle:
faceMashAdapter.notifyDataSetChanged();
b4wnujal

b4wnujal1#

首先,你不应该在家里做繁重的工作 onBindViewHolder 因为它将在每次视图被回收后重新创建时被调用(因为它是未使用的)。
您应该在适配器外部查询数据库,并用查询到的数据占据一个列表。你的列表应该有和你的列表一样多的条目 RecyclerView 有个条目。然后你可以用 position 中的参数 onBindViewHolder 始终为条目获取正确的数据( list.get(position) ).
这样,您只需更改列表的内容,并通过通知适配器哪些项已更改 notifyItemChanged (或者,如果要刷新所有项目,请使用 notifyDataSetChanged ). 这样就刷新了适配器的内容。
那么你在工作中应该做些什么呢 onClick 正在更新列表的内容并通知适配器。

相关问题