RecycerView将不会显示已加载的项目

时间:2019-10-16 23:40:16

标签: java android android-recyclerview

这是我的第一个Android项目。我正在开发用于跟踪学位课程中的课程的应用程序(这是我正在修读的课程的项目)。我在片段中设置了RecyclerView。在某一时刻,已加载的项目不再显示。它以前在工作。我只对应用程序的其他部分进行了一些更改,但对这部分没有进行任何更改。我认为没有理由不显示这些项目。我在Android Studio建议的模拟器更新上单击“安装”后,感觉好像问题开始了。我怀疑更新是导致此问题的原因,但我不确定。

下面的代码段来自我的片段。我已经下载了SQLite数据库,并确认course.getTermId()selectectTerm.getTermId()匹配有4个项目。当我打开片段时,我看到一条吐司消息,上面写着“ 4课程已加载”,因此我知道问题不在于我的逻辑。我尝试在烤面包之前的空白行中同时插入adapter.notifyDataSetChanged();recyclerView.invalidate();,但是这些项目仍然没有显示。我已经检查了布局,以确保RecyclerView的大小和锚定正确。显然有一些我想念的东西,但是我根本看不到。我还确认了我的CourseFlatAdapter没有任何逻辑错误。 Logcat中不会打印任何异常。有人看到我需要做些什么来解决此问题吗?

RecyclerView recyclerView = getView().findViewById(R.id.recyclerCourses);
recyclerView.setLayoutManager(new LinearLayoutManager(this.getContext()));
recyclerView.setHasFixedSize(true);

CourseFlatAdapter adapter = new CourseFlatAdapter();
recyclerView.setAdapter(adapter);

courseViewModel = ViewModelProviders.of(this).get(CourseViewModel.class);
courseViewModel.getAllCourses().observe(this, new Observer<List<Course>>() {
    @Override
    public void onChanged(List<Course> courses) {
        ArrayList<Course> filteredCourseList = new ArrayList<>();
        for(Course course : courses){
            if(course.getTermId() == selectectTerm.getTermId()){
                filteredCourseList.add(course);
            }
        }
        adapter.setCourses(filteredCourseList);

        Toast.makeText(ViewTermFragment.this.getContext(), filteredCourseList.size() + " Courses loaded", Toast.LENGTH_SHORT).show();
    }
});

1 个答案:

答案 0 :(得分:-1)

我知道了。我所做的更改之一是将片段容器放在ScrollView中,这样,当有大量信息时,整个内容就可以滚动了。 RecyclerView锚定到片段的底部,并将高度设置为MatchParent,而片段的高度设置为WrapContent,因此RecyclerView的高度计算如下: 0,无论显示多少个项目。

我将RecyclerView的高度更改为WrapContent,并卸下了底部锚。现在可以正常工作了。感谢所有可能在此上花费时间的人。