2015-11-04 75 views
4

我已經構建了一個基本界面,該界面由RecyclerView內的CardView列表組成。當添加一張卡片時,我需要知道它是否可以在屏幕上看到。確定項目是否在RecyclerView上可見

我想通過使用佈局管理器的findLastVisibleItemPosition()方法獲得此,但它似乎返回結果一個項目比預期少。例如,如果我有一張可見的卡,findLastVisibleItemPosition()返回-1(我期望可見卡的索引將爲0)。

我的簡化核心方法如下:當添加第一項

​​

回程:

Items size = 1, Last Visible Item = -1 

返回當加入第二項:

Items size = 2, Last Visible Item = 0 
Items size = 2, Last Visible Item = 0 

返回時第三item added:

Items size = 3, Last Visible Item = 0 
Items size = 3, Last Visible Item = 1 
Items size = 3, Last Visible Item = 1 

在所有情況下,所有項目都可見(我可以在屏幕上顯示7個可見項目)。

有人能幫我理解findLastVisibleItemPosition()的返回結果,並建議如何在添加它時在屏幕上顯示卡片是否可見?

編輯: 我要澄清的是我真正的目標是要知道,如果一個項目是可見的,當我添加它(使用我的addItem()方法)。如果在addItem()方法內部有一個簡單的方法,那就更好了。

+0

你有試過findLastCompletelyVisibleItemPosition()? – Nanoc

+0

是的,對於上述示例具有相同的結果(即添加3個項目,因爲它們都完全可見)。 – Ratty

+0

根據文檔,-1值與NO_POSITION常量匹配http://developer.android.com/reference/android/support/v7/widget/LinearLayoutManager.html#findLastCompletelyVisibleItemPosition%28%29 – Nanoc

回答

9

對於那些有興趣我已經解決了通過調用findLastVisibleItemPosition一個處理器裏面的問題:

@Override 
public void onChildViewAttachedToWindow(View view) { 

    Handler handler = new Handler(); 
     handler.post(new Runnable() { 
      @Override 
      public void run() { 

       System.out.println(llm.findLastVisibleItemPosition()); 
      } 
     }); 
} 
+0

將項目添加到適配器後,佈局如果它剛剛在它之後被調用,管理員沒有正確報告。有了這個,它的工作!謝謝! –

+0

我不得不延長100ms。然後它工作。 – Davidea

相關問題