Android 展开recycler veiw项目时(显示子视图),列表应滚动至展开项目的底部

Android 展开recycler veiw项目时(显示子视图),列表应滚动至展开项目的底部,android,android-recyclerview,Android,Android Recyclerview,我有一个带有自定义适配器的RecyclerView。列表中的每一项都包含隐藏的折叠视图,单击“展开”按钮时会显示这些视图。问题是,如果项目位于屏幕底部,则项目内容将被排除在屏幕之外。是否可以滚动列表视图,使扩展项的内容显示在屏幕上?我希望我的问题有意义 UnitCardAdapter.java public class ViewHolder { public ViewHolder(View view) { cardBody = (LinearLayout) view.fi

我有一个带有自定义适配器的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()
}

实际上,Recylerview在那个时候已经被渲染了,所以它不会自动滚动,我们可以使用这个方法手动滚动到那个位置

reyleriew.getLayoutManager().scrollToPosition(youPositionInTheAdapter).
但问题是它每次都会这样做,所以我们试图找出我们点击的项目最终在屏幕上是可见的,然后我们调用上面的方法

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

lastCompletelyVisibleItemPosition = ((LinearLayoutManager) recyclerView.getLayoutManager()).findLastVisibleItemPosition()
现在,点击项目进行检查

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

我希望这对你有用。

非常感谢你,@Maulik Togadiya!你给了我一个绝妙的主意。是的,我使用LinearLayoutManager。我一开始就尝试使用scrollToPositionposition,但可能是误用了,所以它不起作用。但现在它起作用了。事实上,我不必使用findLastVisibleItemPosition,它在没有它的情况下工作得很好。好的,谢谢:,是的,这很好。如果你有更好的想法,那么请在这里分享你的想法,以便其他人知道。
if(lastCompletelyVisibleItemPosition == selectedPostion){
        reyleriew.getLayoutManager().scrollToPosition(selectedPostion).
}