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