我有一个带有自定义适配器的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);
}
}
答案 0 :(得分:1)
实际上Recylerview当时已经渲染,因此它不会自动滚动。我们可以通过使用此方法手动滚动到该位置来实现。
reyleriew.getLayoutManager().scrollToPosition(youPositionInTheAdapter).
但是问题在于它每次都会执行,以至于我们试图找出被点击的项目最终在屏幕上可见,然后我们调用上述方法。
第一个/最后一个可见子取决于LayoutManager
。如果您使用的是LinearLayoutManager
或GridLayoutManager
,则可以使用
lastCompletelyVisibleItemPosition = ((LinearLayoutManager) recyclerView.getLayoutManager()).findLastVisibleItemPosition()
现在对点击的物品进行检查
if(lastCompletelyVisibleItemPosition == selectedPostion){
reyleriew.getLayoutManager().scrollToPosition(selectedPostion).
}
我希望这对您有用。