Recyclerview не прокручивается плавно, когда используются разные видоискатели - PullRequest
1 голос
/ 12 октября 2019

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

@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
    final int itemType = getItemViewType(position);
    switch (itemType) {
        case Const.CHAT_NOTIFICATION_TYPE_NOTIFY:
            ((NotifyViewHolder) holder).bindData(position);
            break;
        case VIEW_TYPE_DATE_HEADER:
            ((DefaultDateHeaderViewHolder) holder).bindData(position);
            break;
        case VIEW_TYPE_TEXT_MESSAGE:
            ((OutgoingViewHolder) holder).bindData(position);
            break;
        case -VIEW_TYPE_TEXT_MESSAGE:
            ((IncomingViewHolder) holder).bindData(position);
            break;
        case VIEW_TYPE_IMAGE_MESSAGE:
            ((OutgoingImageViewHolder) holder).bindData(position);
            break;
        case -VIEW_TYPE_IMAGE_MESSAGE:
            ((IncomingImageViewHolder) holder).bindData(position);
            break;
        case VIEW_TYPE_ATTACHMENT:
            ((OutgoingAttachmentViewHolder) holder).bindData(position);
            break;
        case -VIEW_TYPE_ATTACHMENT:
            ((IncomingAttachmentViewHolder) holder).bindData(position);
            break;
    }
    throw new IllegalStateException("Wrong message view type. Please, report this issue on GitHub with full stacktrace in description.");
}



@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    View row;
    switch (viewType) {
        case Const.CHAT_NOTIFICATION_TYPE_NOTIFY:
            row = LayoutInflater.from(context).inflate(R.layout.notify_bubble, parent, false);
            return new NotifyViewHolder(row);
        case VIEW_TYPE_DATE_HEADER:
            row = LayoutInflater.from(context).inflate(R.layout.item_date_header, parent, false);
            return new NotifyViewHolder(row);
        case VIEW_TYPE_TEXT_MESSAGE:
            row = LayoutInflater.from(context).inflate(R.layout.outgoing_bubble, parent, false);
            return new OutgoingViewHolder(row);
        case -VIEW_TYPE_TEXT_MESSAGE:
            row = LayoutInflater.from(context).inflate(R.layout.incoming_bubble, parent, false);
            return new IncomingViewHolder(row);
        case VIEW_TYPE_IMAGE_MESSAGE:
            row = LayoutInflater.from(context).inflate(R.layout.item_outcoming_image_message, parent, false);
            return new OutgoingImageViewHolder(row);
        case -VIEW_TYPE_IMAGE_MESSAGE:
            row = LayoutInflater.from(context).inflate(R.layout.item_incoming_image_message, parent, false);
            return new IncomingImageViewHolder(row);
        case VIEW_TYPE_ATTACHMENT:
            row = LayoutInflater.from(context).inflate(R.layout.item_outcoming_attachment, parent, false);
            return new OutgoingAttachmentViewHolder(row);
        case -VIEW_TYPE_ATTACHMENT:
            row = LayoutInflater.from(context).inflate(R.layout.item_incoming_attachment, parent, false);
            return new IncomingAttachmentViewHolder(row);
    }


    return null;
}

Есть ли способ реализовать макет с плавной прокруткой, который раздувает различные макеты?

1 Ответ

0 голосов
/ 12 октября 2019

Здесь вам нужен один держатель вида и импортированные в него разные файлы макетов.

  • Попробуйте включить все макеты в один.

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

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