簡體   English   中英

RecyclerView 獲取第一個可見項的高度

[英]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 的列

獲取第一個項目高度的步驟:

  1. onScrolled()的 recyclerview 引用中獲取布局管理器
  2. 使用layoutManager.findFirstVisibleItemPosition()獲取第一個可見項位置
  3. 如果第一個可見項位置為 0,則獲取第 0 個子高度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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM