(recycle) listview - рассчитать высоту

У меня есть несколько списков в моем приложении для Android, действия, которые содержат эти списки (recycle), также содержат другое содержимое. Помещение списка ниже содержания отлично работает без какого-либо пользовательского моделирования. Однако при прокрутке списка он прокручивает список, показывая около 1 или 2 элемента, в то время как мы хотим прокрутить всю активность, чтобы содержимое перемещалось вверх и показывался полный список.

Чтобы сделать операцию прокручиваемой, нам понадобится ScrollView, это немного противоречит руководящим принципам проектирования, я знаю, но мне это нужно.

Чтобы это сделать, я использовал это решение: qaru.site/info/19754/...

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

Теперь мне немного повезло, что элементы в списках имеют одинаковую высоту, поэтому с небольшим количеством проб и ошибок я мог бы добиться этого так:

recyclerView.setMinimumHeight(posts.size() * 190);

Это, однако, действительно не работает, поскольку мы имеем разные разрешения и размеры экрана. на xhdpi это сработало бы, но на xxhdpi мне все равно понадобилось бы место для еще 4 предметов.

Одно решение, которое я нашел:

int totalHeight = 0;

for (int i = 0; i < mAdapter.getCount(); i++) {
    View mView = mAdapter.getView(i, null, listView);

    mView.measure(
            MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED),

            MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED));

    totalHeight += mView.getMeasuredHeight();
    Log.w("HEIGHT" + i, String.valueOf(totalHeight));

}

ViewGroup.LayoutParams params = listView.getLayoutParams();
params.height = totalHeight
        + (listView.getDividerHeight() * (mAdapter.getCount() - 1));
listView.setLayoutParams(params);
listView.requestLayout();

Однако это не работает с RecyclerView.Adapter<myAdpater.MyViewHolder>, потому что он не содержит метода getView(). (а не метод getDividerHeight()).

Вот как выглядит один из моих адаптеров:

public class ResponsesAdpater extends RecyclerView.Adapter<ResponsesAdpater.MyViewHolder> {

private LayoutInflater inflrater;
List<Post> posts = Collections.emptyList();
Context context;
private ClickListenerResponseList listener;

public ResponsesAdpater(Context context, List<Post> posts) {
    this.context = context;
    inflrater = LayoutInflater.from(context);
    this.posts = posts;
}

@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    View view = inflrater.inflate(R.layout.responses_row, parent, false);
    MyViewHolder holder = new MyViewHolder(view);
    return holder;
}

@Override
public void onBindViewHolder(MyViewHolder holder, int position) {
    Post post = posts.get(position);
    holder.lblMainText.setText(post.text);
}

public void setClickListener(ClickListenerResponseList listener)
{
    this.listener = listener;
}

@Override
public int getItemCount() {

    return posts.size();
}

class MyViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener{

    TextView lblMainText;
    ImageView imgIcon;

    public MyViewHolder(View itemView) {
        super(itemView);
        lblMainText = (TextView) itemView.findViewById(R.id.lblPostMainText);
        imgIcon = (ImageView) itemView.findViewById(R.id.imgIcon);
    }


    @Override
    public void onClick(View v) {
        if(listener != null)
        {
            listener.ResponseClicked(v, getAdapterPosition());
        }
    }
}

public interface ClickListenerResponseList{
    void ResponseClicked(View view, int position);
}

}

Другим решением будет что-то вроде этого, но при расширении с RecyclerView у нас нет метода onDraw для переопределения.

Помощь будет очень признательна!