很抱歉,如果这是重复的。 我目前正在使用ToDo应用,正在使用Room数据库库通过RecyclerView显示项目列表。在主要活动中,我可以使用适配器从数据库访问信息。没问题。
问题是,当我按下其中一项时,我想打开一个DetailActivity,用户可以在其中修改ToDo。目前,我正在使用putExtra和hasExtra获取所需的信息:
MainActivity
private void initializeAdapterForRecyclerView(){
mAdapter = new ToDoAdapter(new ToDoAdapter.ToDoClickListener() {
@Override
public void onToDoClick(int clickedItemIndex) {
Intent intent = new Intent(ToDoActivity.this, EditorActivity.class);
Log.d(LOG_TAG, "This is " + mAdapter.getToDoPosition(clickedItemIndex).getTitle());
intent.putExtra(Intent.EXTRA_TEXT, String.valueOf(clickedItemIndex));
intent.putExtra("existingTitle", mAdapter.getToDoPosition(clickedItemIndex).getTitle());
intent.putExtra("modifiedTitle", mAdapter.getToDoPosition(clickedItemIndex).getDisplayTitle());
intent.putExtra("existingDescription", mAdapter.getToDoPosition(clickedItemIndex).getDescription());
startActivity(intent);
}
});
mToDoList.setAdapter(mAdapter);
}
DetailActivity
private void getExistingToDoContent() {
Intent intent = getIntent();
if (intent.hasExtra("existingTitle")) {
String displayTitle = intent.getStringExtra("modifiedTitle");
Log.d(LOG_TAG, "Getting the title: " + displayTitle);
mTitleEditText.setText(displayTitle);
String existingDescription = intent.getStringExtra("existingDescription");
Log.d(LOG_TAG, "Getting the description: " + existingDescription);
mDescriptionEditText.setText(existingDescription);
}
}
当我想使用ViewModel类来从DetailActivity中删除项目时,就会出现问题。
ToDoViewModel
public void delete(ToDo toDo){
mRepository.delete(toDo);
}
ToDoRepository
public void delete(ToDo todo){
new deleteAsyncTask(mToDoDao).execute(todo);
}
private static class deleteAsyncTask extends AsyncTask<ToDo, Void, Void> {
private ToDoDao mAsyncToDoDao;
deleteAsyncTask(ToDoDao dao){
mAsyncToDoDao = dao;
}
@Override
protected Void doInBackground(ToDo... toDos) {
mAsyncToDoDao.deleteToDo(toDos[0]);
return null;
}
}
}
所以我的问题是,是否可以从DetailActivity访问被单击项的数据库条目以填充字段并使用ViewModel活动中的方法删除/更新条目? (除了使用putExtra / hasExtra之外)
谢谢