RecycerView не будет отображать загруженные элементы - PullRequest
0 голосов
/ 17 октября 2019

Это мой первый 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 голосов
/ 19 октября 2019

Я понял это. Одно из внесенных мною изменений заключалось в том, чтобы поместить контейнер фрагментов в ScrollView, чтобы все это можно было прокручивать при большом количестве информации. RecyclerView был привязан к нижней части фрагмента и имел высоту, установленную на MatchParent, в то время как высота фрагмента была установлена ​​на WrapContent, поэтому RecyclerView закончилась с высотой, рассчитанной как 0, независимо от того, сколько элементов былоотображение.

Я изменил высоту RecyclerView на WrapContent и удалил нижний якорь. Теперь он работает как положено. Спасибо всем, кто, возможно, потратил на это время.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...