展开“回收者可见项目”时(显示子视图),列表应滚动到展开项目的底部

时间:2019-07-10 15:54:00

标签: android android-recyclerview

我有一个带有自定义适配器的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 个答案:

答案 0 :(得分:1)

实际上Recylerview当时已经渲染,因此它不会自动滚动。我们可以通过使用此方法手动滚动到该位置来实现。

reyleriew.getLayoutManager().scrollToPosition(youPositionInTheAdapter).

但是问题在于它每次都会执行,以至于我们试图找出被点击的项目最终在屏幕上可见,然后我们调用上述方法。

第一个/最后一个可见子取决于LayoutManager。如果您使用的是LinearLayoutManagerGridLayoutManager,则可以使用

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

现在对点击的物品进行检查

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

我希望这对您有用。