【发布时间】:2021-01-24 12:01:41
【问题描述】:
我正在开发一款基于房间数据库管理我的锻炼的应用程序。
在这里,我有一个带有适配器的 recyclerview,用于在锻炼中进行练习。 我目前的问题是新的练习在创建它们并切换回锻炼活动后没有显示在回收视图中。
这似乎是一个非常简单的话题(从其他活动返回后更新 recyclerview)但我无法让它工作。
-
锻炼活动的 onCreate 的初始负荷:
class GetExercises extends AsyncTask<Long, Void, List<Exercise>>{ @Override protected List<Exercise> doInBackground(Long... params){ if (params.length == 0 || params.length > 1) return null; return DatabaseClient .getInstance(getApplicationContext()) .getAppDatabase().exerciseDao() .getReferenced(params[0]); } protected void onPostExecute(List<Exercise> exerciseList){ super.onPostExecute(exerciseList); rv_exercises.setAdapter(new Adapter_Exercise_RV(Activity_Workout_Edit.this, exerciseList)); } } -
创建一个新的练习并将 id 返回到之前的锻炼活动:
class CreateExercise extends AsyncTask<Void, Void, Void> { long id; @Override protected Void doInBackground(Void... voids) { Exercise ex = new Exercise(); ex.setTitle(sTitle); ex.setSet(sSet); ex.setRep(sRep); ex.setAsTimer(bAsTimer); ex.setWorkoutId(workoutId); id = DatabaseClient.getInstance(getApplicationContext()) .getAppDatabase() .exerciseDao() .insertwithRet(ex); return null; } @Override protected void onPostExecute(Void aVoid) { super.onPostExecute(aVoid); finish(id); Toast.makeText(getApplicationContext(), "created new exercise", Toast.LENGTH_LONG).show(); } } new CreateExercise().execute(); -
在锻炼活动中更新适配器 onActivityResult
protected void onActivityResult(int requestCode, int resultCode, Intent data){ super.onActivityResult(requestCode, resultCode, data); if(requestCode == 1 && resultCode == RESULT_OK){ long exerciseId = (long) data.getExtras().get("exerciseId"); rv_exercises.getAdapter().notifyDataSetChanged(); } }
该练习已在数据库中创建,重新打开该练习后,新练习将正确显示。 我确实感觉“notifyDataSetChanged”不起作用,但找不到原因?
【问题讨论】:
标签: java android android-activity android-recyclerview