自定义ItemDecoration未在RecyclerView的最后一个视图上绘制

时间:2016-08-21 17:51:43

标签: android android-recyclerview

我正在Android上构建一个应用程序并使用了几个recyclerviews。

在我使用了recyclerview的第一页中,一切都运行良好,我的自定义ItemDecoration(分隔符)应用于所有视图。

然后我开始了一个新页面,其中我在类似的RecyclerView上使用相同的分隔符,但在最后一个列表项中,底部分隔符不存在。

看到它在一个地方完美运行,我不相信问题是自定义ItemDecoration类,也不是xml。我也尝试使用相同的视图来查找有效的视图,但仍然没有绘制最后一个分隔符。

这里是在有问题的recyclerview中设置我的适配器的代码:

private void setUpPracticesList() {
    lstPractices = (RecyclerView) getActivity().findViewById(R.id.lstPractices);
    lstPractices.setLayoutManager(new LinearLayoutManager(getActivity()));

    RecyclerView.Adapter<PracticeHolder> adapter = new RecyclerView.Adapter<PracticeHolder>() {

        String[] titles = getResources().getStringArray(R.array.practices_names);
        int[] imageIds = {R.drawable.consultation_meeting_icon,
                R.drawable.monitoring_meeting_icon,
                R.drawable.parent_lectures_icon,
                R.drawable.parent_support_groups_icon,
                R.drawable.staff_courses_icon};

        @Override
        public PracticeHolder onCreateViewHolder(ViewGroup parent, int viewType) {
            View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.kidsense_practices_list_item, parent, false);

            return new PracticeHolder(v);
        }

        @Override
        public void onBindViewHolder(PracticeHolder holder, int position) {
            holder.setName(titles[position]);
            holder.setImage(imageIds[position]);
        }

        @Override
        public int getItemCount() {
            return titles.length;
        }
    };

    lstPractices.setAdapter(adapter);
    lstPractices.setHasFixedSize(true);
    lstPractices.addItemDecoration(new DividerItemDecoration(getActivity(), null));
}

有没有人有任何想法?

1 个答案:

答案 0 :(得分:1)

我找到了解决方案:

我发现如果再循环视图中没有剩余空间,则recyclerview将不会在最后一个视图的底部显示分隔符。

在我的情况下,问题是我的recyclerview位于高度为“wrap_content”的布局中,这意味着在recyclerview下面没有剩余空间来显示分隔符。一旦我重新布置我的布局,以便我的recyclerview在下面有更多的空间,父布局高度为“match_parent”,就会显示最终的分隔符。