устранить разделитель поверх первого элемента в RecyclerView - PullRequest
0 голосов
/ 12 января 2019

У меня есть RecyclerView с заголовком сверху (а именно заголовок, TextView, который описывает содержание RecyclerView)

Теперь я объединил два разных виджета с некоторой логикой в ​​адаптер, чтобы получить этот эффект, но у меня неожиданный результат.

В программе recyclerView есть разделители, но У меня есть строка, которую я хочу исключить между TextView и первым элементом `RecyclerView:

Другими словами, мне нужно исключить только верхний разделитель RecyclerView, первый элемент, потому что я хочу, чтобы между TextView сверху и списком ниже не было разделения, остальные элементы вместо этого я ожидаю, что они разделены, как я получил

В этой записи показано, как устранить последний разделитель строк в RV, но мне нужна первая верхняя строка, и я понятия не имею, как я могу адаптировать этот фрагмент к своему сценарию использования, или если мне следует создать новый класс.

1 Ответ

0 голосов
/ 12 января 2019

В RecyclerView.ItemDecoration я хочу идентифицировать первый вид в RecyclerView и не рисовать для него украшение. Я также хочу не оставлять места для украшения, так как оно не нарисовано. Это требует переопределения getItemOffsets().

Вот некоторый код, который применяет украшение ко всем элементам RecyclerView, кроме первого и последнего.

    public class DividerItemDecorator extends RecyclerView.ItemDecoration {  
    private Drawable mDivider;  

    public DividerItemDecorator(Drawable divider) {  
        mDivider = divider;  
    }  

    @Override  
  public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) {  
        int pos = parent.getChildAdapterPosition(view);  
        if (pos != 0 &&  
            pos != parent.getLayoutManager().getItemCount() - 1) {  
            outRect.bottom = mDivider.getIntrinsicHeight();  
        }  
    }  

    @Override  
  public void onDraw(Canvas canvas, RecyclerView parent, RecyclerView.State state) {  
        int dividerLeft = parent.getPaddingLeft();  
        int dividerRight = parent.getWidth() - parent.getPaddingRight();  

        int childCount = parent.getChildCount();  
        for (int i = 0; i < childCount; i++) {  
            View child = parent.getChildAt(i);  

            int pos = parent.getChildAdapterPosition(child);  
            if (pos != 0 &&  
                pos != parent.getLayoutManager().getItemCount() - 1) {  

                RecyclerView.LayoutParams params = (RecyclerView.LayoutParams) child.getLayoutParams();  

                int dividerTop = child.getBottom() + params.bottomMargin;  
                int dividerBottom = dividerTop + mDivider.getIntrinsicHeight();  
                mDivider.setBounds(dividerLeft, dividerTop, dividerRight, dividerBottom);  
                mDivider.draw(canvas);  
            }  
        }  
    }  
}

Вот как это выглядит. Я преувеличил разделители, чтобы они выделялись.

enter image description here

...