Recycler ItemDecoration элемент, появляющийся поверх элементов переработки - PullRequest
0 голосов
/ 01 июля 2019

Мне нужно было добавить липкий заголовок в переработке. Я использовал RosterRecyclerItemDecoration, и это дало мне желаемый результат.

Проблема в том, что элемент Decorator появляется поверх элементов recycler view.

Я хочу добавить элемент декоратора между элементами с видом переработчика, а не поверх элементов с видом переработчика.

Это мой код.

RosterRecyclerItemDecoration rosterRecyclerItemDecoration =
                new RosterRecyclerItemDecoration(true,
                        this);
 rvLeaders.addItemDecoration(rosterRecyclerItemDecoration);

Класс декоратора:

 public class RosterRecyclerItemDecoration extends RecyclerView.ItemDecoration {


 public RosterRecyclerItemDecoration(boolean sticky,@NonNull IDecoraterCallback iDecoraterCallback){
        this.sticky= sticky;
        this.iDecoraterCallback= iDecoraterCallback;
    }



    @Override
    public void onDrawOver(@NonNull Canvas c, @NonNull RecyclerView parent, @NonNull RecyclerView.State state) {
        super.onDrawOver(c, parent, state);

        CharSequence previousHeader = "";

        if (headerView == null) {
            headerView = inflateHeaderView(parent);
            header = (TextView) headerView.findViewById(R.id.tvHeader);
            fixLayoutSize(headerView, parent);
        }


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

            if(iDecoraterCallback.getSectionHeader(position) !=null) {
                CharSequence title = iDecoraterCallback.getSectionHeader(position);
                header.setText(title);

                if (!previousHeader.equals(title)) {                
                    drawHeader(c, child, headerView);
                    previousHeader = title;
                    }  
            }
        }
    }

1 Ответ

0 голосов
/ 01 июля 2019

Вы должны использовать Rect , чтобы нарисовать ваш декоратор.В вашем конструкторе RosterRecyclerItemDecoration вы можете передать высоту, например, 40 или 50 dp, это будет зависеть от вашего макета.

Теперь В вашем RosterRecyclerItemDecoration переопределении класса getItemOffsets Это выглядит так:

public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) {
        super.getItemOffsets(outRect, view, parent, state);
}

в этом методе переопределения вы можете установить свой рост.Как outRect.top = headerOffset; [Проверьте, что это представление - ваш sectionHeader]

Примечание: Здесь headerOffset - это высота, которую вы отправляете в конструкторе RosterRecyclerItemDecoration.

...