Android RecyclerView中的删除操作不执行任何操作
这是适配器(RVAdapter\u remementers.java) 最后,提醒契约类:Android RecyclerView中的删除操作不执行任何操作,android,sqlite,android-recyclerview,android-sqlite,Android,Sqlite,Android Recyclerview,Android Sqlite,这是适配器(RVAdapter\u remementers.java) 最后,提醒契约类: public static final String TITLE = "title"; 您的mAdapter仍具有已删除值的值。您必须更新dbList以获得当前值 private void on提醒删除(字符串标题){ dbHelper.deleteARow(标题); 删除(/*要删除的值*/); mAdapter.notifyDataSetChanged(); } 我实现了你所说
public static final String TITLE = "title";
您的
mAdapter
仍具有已删除值的值。您必须更新dbList
以获得当前值
private void on提醒删除(字符串标题){
dbHelper.deleteARow(标题);
删除(/*要删除的值*/);
mAdapter.notifyDataSetChanged();
}
我实现了你所说的dbHelper.deleteARow(title);dbList.remove(位置);mAdapter.notifyDataSetChanged();但是它仍然没有做任何事情。为什么要在适配器中设置dbList
和context
静态
?使其非静态。另外,适配器中dbList的第一次初始化已经过时,因为您使用this.dbList=dbList
Umm初始化它。做了你推荐的,但结果还是一样的。顺便说一句,删除项目后应该有Log.d条目,但也没有。因此,我认为问题可能是因为deleteARow()函数甚至没有被调用?请输入onContextItemSelected(MenuItem项)
FloatingActionButton fab;
DBHelper dbHelper;
List<DatabaseModel> dbList;
RecyclerView mRecyclerView;
private RecyclerView.Adapter mAdapter;
private RecyclerView.LayoutManager mLayoutManager;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_reminders);
fab = (FloatingActionButton) findViewById(R.id.fab);
try {
getSupportActionBar().setTitle("Reminders");
} catch (Exception e) {
e.printStackTrace();
}
dbHelper = new DBHelper(this);
dbList = new ArrayList<DatabaseModel>();
dbList = dbHelper.getDataFromDB();
mRecyclerView = (RecyclerView) findViewById(R.id.rv_reminders);
mRecyclerView.setHasFixedSize(true);
// using a linear layout manager
mLayoutManager = new LinearLayoutManager(this);
mRecyclerView.setLayoutManager(mLayoutManager);
//specifying an adapter
mAdapter = new RVAdapter_Reminders(this, dbList);
mRecyclerView.setAdapter(mAdapter);
registerForContextMenu(mRecyclerView);
}
public void addReminder(View view) {
Intent intent = new Intent(Reminders.this, NewReminder.class);
startActivity(intent);
}
@Override
public void onBackPressed() {
Intent intent = new Intent(Reminders.this, MainActivity.class);
startActivity(intent);
}
@Override
public boolean onContextItemSelected(MenuItem item) {
int position = -1;
try{
position = ((RVAdapter_Reminders)mRecyclerView.getAdapter()).getPosition();
}catch (Exception e) {
Log.d(String.valueOf(this), e.getLocalizedMessage(), e);
return super.onContextItemSelected(item);
}
switch (item.getItemId()){
case R.id.menu_delete_option:
onReminderDelete(dbList.get(position).getTitle());
break;
}
return super.onContextItemSelected(item);
}
private void onReminderDelete(String title){
dbHelper.deleteARow(title);
mRecyclerView.setAdapter(mAdapter);
}
public void deleteARow(String title) {
SQLiteDatabase db = this.getWritableDatabase();
db.delete(REMINDERS_TABLE, RemindersContract.TITLE + " = " + title, null);
Log.d(String.valueOf(this), title + " deleted");
db.close();
}
public static final String TITLE = "title";