Android Recyclerview不更新数据列表
我使用recyclerview使用游标显示sqlite数据库中的数据,当我从数据库中删除一个项目时,该项目会被删除,但我的recycler视图不会刷新 我必须回到我的主要活动,然后数据被刷新。我使用了notifyItemRemoved()和notifyDataSetChanged() 这是我的密码 适配器Android Recyclerview不更新数据列表,android,android-recyclerview,notifydatasetchanged,Android,Android Recyclerview,Notifydatasetchanged,我使用recyclerview使用游标显示sqlite数据库中的数据,当我从数据库中删除一个项目时,该项目会被删除,但我的recycler视图不会刷新 我必须回到我的主要活动,然后数据被刷新。我使用了notifyItemRemoved()和notifyDataSetChanged() 这是我的密码 适配器 public class BookmarkAdapter extends RecyclerView.Adapter<BookmarkAdapter.ViewHolder> { p
public class BookmarkAdapter extends RecyclerView.Adapter<BookmarkAdapter.ViewHolder> {
public Cursor cursor;
DatabaseHelper mDBHelper;
public BookmarkAdapter(){
}
public void setCursor(Cursor cursor){
this.cursor = cursor;
}
@NonNull
@Override
public BookmarkAdapter.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int position) {
Context context = parent.getContext();
LayoutInflater inflater = LayoutInflater.from(context);
View v = inflater.inflate(R.layout.bookmark_item_layout, parent,false);
BookmarkAdapter.ViewHolder viewHolder = new BookmarkAdapter.ViewHolder(v,context);
return viewHolder;
}
@Override
public void onBindViewHolder(@NonNull final BookmarkAdapter.ViewHolder holder, int position) {
cursor.moveToPosition(position);
holder.tvWordBookmark.setText(cursor.getString(1));
holder.btnDeleteBookmark.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String id = cursor.getString(0);
mDBHelper.deleteBookmark(id);
notifyItemRemoved(holder.getAdapterPosition());
notifyDataSetChanged();
}
});
}
@Override
public int getItemViewType(int position) {
return super.getItemViewType(position);
}
@Override
public int getItemCount() {
if (cursor == null) return 0;
return cursor.getCount();
}
public class ViewHolder extends RecyclerView.ViewHolder {
Context context;
TextView tvWordBookmark;
ImageButton btnDeleteBookmark;
BookmarkAdapter bookmarkAdapter;
public ViewHolder(@NonNull View itemView, final Context context) {
super(itemView);
this.context = context;
mDBHelper = new DatabaseHelper(context);
bookmarkAdapter = new BookmarkAdapter();
tvWordBookmark = itemView.findViewById(R.id.tvWordBookmark);
btnDeleteBookmark = itemView.findViewById(R.id.btnDeleteBookmark);
itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
int position = getAdapterPosition();
cursor.moveToPosition(position);
Intent intent = new Intent(context, DetailActivity.class);
intent.putExtra("ID",cursor.getString(0));
intent.putExtra("WORD",cursor.getString(1));
intent.putExtra("DEFINITION",cursor.getString(2));
context.startActivity(intent);
}
});
}
}
}
在
notifyDataSetChanged()之前,您必须在单击下面的方法时更新数据列表代码>
删除后,您必须重新查询数据库,并用新光标交换光标,然后调用notifyDataSetChanged()
'int position=getAdapterPosition();String id=cursor.getString(0);mDBHelper.deleteBookmark(id);cursor.requery();已移除(位置)的项目;notifyDataSetChanged();'工作,但游标。重新查询();是否已弃用?是否有其他选择that@FaisalKhan请点击此链接,希望对您有所帮助,不要忘记接受我的回答,谢谢。
public class BookmarkActivity extends AppCompatActivity {
private RecyclerView rvWordBookmark;
private BookmarkAdapter bookmarkAdapter;
private DatabaseHelper mDBHelper;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_bookmark);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
rvWordBookmark = findViewById(R.id.recyclerviewBookmark);
rvWordBookmark.setLayoutManager(new LinearLayoutManager(this));
mDBHelper = new DatabaseHelper(this);
bookmarkAdapter = new BookmarkAdapter();
bookmarkAdapter.setCursor(mDBHelper.getBookmarkWord(""));
rvWordBookmark.setAdapter(bookmarkAdapter);
}
@Override
public void onBackPressed() {
super.onBackPressed();
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
return super.onCreateOptionsMenu(menu);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
if (id== android.R.id.home){
onBackPressed();
return true;
}
return super.onOptionsItemSelected(item);
}
}
holder.btnDeleteBookmark.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String id = cursor.getString(0);
mDBHelper.deleteBookmark(id);
//here
notifyItemRemoved(holder.getAdapterPosition());
notifyDataSetChanged();
}
});