[英]RecyclerView get height of first visible item
如何計算recyclerview
第一個可見項目的高度?
public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
switch (newState) {
case RecyclerView.SCROLL_STATE_IDLE:
Log.d("scroll_stop","The RecyclerView is not scrolling : ");
View firstItemView = mGLM.findViewByPosition(mGLM.findFirstVisibleItemPosition());
View mVizibleView= mPlm.findViewByPosition(mGLM.findFirstVisibleItemPosition());
}
});
但這給了我視圖的完整高度
獲取任何 RecyclerView 項目的大小是沒有意義的,如果您獲取任何項目的getHeight()
或getWidth()
,它只會給出 Null 錯誤並且您的應用程序會崩潰。
您可以做的是使用您的 ViewHolder 從 recyclerView Adapter 並首先將特定高度設置為您想要的任何項目,然后在其他地方使用該高度。
看看下面的代碼,也許有幫助:
class myViewHolder extends RecyclerView.ViewHolder { RemaltiveLayout itemLayout; public myViewHolder(View itemView) { super(itemView); itemLayout = (RemaltiveLayout) itemView.findViewById(R.id.myItemLayout); itemLayout.getLayoutParams().height = res.getDimensionPixelSize(R.dimen.height_value); }
您也應該能夠在特定位置使用 item
不過,這不適用於 Width,因為項目總是被拉伸以填充 layoutManager 的列
獲取第一個項目高度的步驟:
onScrolled()
的 recyclerview 引用中獲取布局管理器layoutManager.findFirstVisibleItemPosition()
獲取第一個可見項位置layoutManager.getChildAt(0)
示例代碼:
RecyclerView.OnScrollListener scrollListener = new RecyclerView.OnScrollListener() {
@Override
public void onScrolled(@NonNull RecyclerView recyclerView, int dx, int dy) {
super.onScrolled(recyclerView, dx, dy);
LinearLayoutManager layoutManager = (LinearLayoutManager) recyclerView.getLayoutManager();
if (layoutManager != null) {
int child0Height = 0;
int currentFirstVisibleItem = layoutManager.findFirstVisibleItemPosition();
if (currentFirstVisibleItem == 0) {
final View childAt0 = layoutManager.getChildAt(0);
if (childAt0 != null) {
child0Height = childAt0.getHeight();
}
}
}
}
};
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.