Когда элемент вторичной переработки переработан (показаны дочерние представления), список должен прокрутиться до нижней части расширенного элемента. - PullRequest
0 голосов
/ 10 июля 2019

У меня есть RecyclerView с пользовательским адаптером. Каждый элемент списка содержит скрытые (свернутые) представления, которые отображаются при нажатии кнопки «развернуть». Проблема в том, что если элемент находится в нижней части экрана, содержимое элемента остается за пределами экрана. Можно ли прокрутить представление списка, чтобы содержимое расширенного элемента отображалось на экране? Я надеюсь, что мой вопрос имеет смысл.

UnitCardAdapter.java
public class ViewHolder {
    public ViewHolder(View view) {
        cardBody = (LinearLayout) view.findViewById(R.id.cardBody);

        setListeners(unitCard, this);
    }
}

private void setListeners(final UnitCard unitCard, final ViewHolder holder) {
    int position = holder.getAdapterPosition();
    holder.unitExpandBtn.setOnClickListener( 
       unitCard.getUnitExpandOnClick()
}
UnitCard.java
public View.OnClickListener getUnitExpandOnClick() {
    return new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            if (!mIsExpanded) {
                expand();
            } else { 
                collapse(); 
            }
        }
    };
}

public void expand() {
    mIsExpanded = true;
    if (mViewHolder != null) {
        mViewHolder.cardBody.setVisibility(View.VISIBLE);
    }
}

public void collapse() {
    mIsExpanded = false;
    if (mViewHolder != null) {
        mViewHolder.cardBody.setVisibility(View.GONE);
    }
}

enter image description here

1 Ответ

1 голос
/ 10 июля 2019

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

reyleriew.getLayoutManager().scrollToPosition(youPositionInTheAdapter).

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

Первый / последний видимый дочерний элемент зависит от LayoutManager.Если вы используете LinearLayoutManager или GridLayoutManager, вы можете использовать

lastCompletelyVisibleItemPosition = ((LinearLayoutManager) recyclerView.getLayoutManager()).findLastVisibleItemPosition()

А теперь для сделанного по щелчку предмета проверить

if(lastCompletelyVisibleItemPosition == selectedPostion){
        reyleriew.getLayoutManager().scrollToPosition(selectedPostion).
}

Надеюсь, это сработает для вас.

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