2016-03-30 127 views
0

我想我RecyclerView與此代碼第一個完全可見項Viewholder:的Android findViewHolderForAdapterPostion返回null

myRecyclerView = (RecyclerView) findViewById(R.id.recycler_demo); 
myRecyclerView.setHasFixedSize(true); 
myLayoutManager = new LinearLayoutManager(getApplicationContext()) 
myRecyclerView.setLayoutManager(myLayoutManager); 
LinearCardListAdapter myAdapter = new LinearCardListAdapter(getApplicationContext(), initilizeData()); 
myRecyclerView.setAdapter(myAdapter); 
ImageView iv = new ImageView(this); 
int adapterPosition = myLayoutManager.findFirstCompletelyVisibleItemPosition(); 
RecyclerView.ViewHolder visibleViewHolder = myRecyclerView.findViewHolderForAdapterPosition(adapterPosition); 

在這種情況下visibleViewHolder爲空。

我也試過findViewHolderForAdapterPosition數字從0到7(我的數據集從0到7有8個數據),我再次得到空;

任何解決方案?

+0

既然你叫'notifyDataSetChanged()'在它之前,你'null',因爲佈局還沒有準備好。 「請注意,當適配器內容發生變化時,ViewHolder位置不會更新,直到下一次佈局計算。如果有未決的適配器更新,則此方法的返回值可能與您的適配器內容不匹配。您可以使用#getAdapterPosition()獲取當前一個ViewHolder的適配器位置。「[doc](https://developer.android.com/intl/zh-cn/reference/android/support/v7/widget/RecyclerView.html#findViewHolderForAdapterPosition(int)) – yennsarah

+1

可能的重複[Android的recyclerView findViewHolderForAdapterPosition返回null](http://stackoverflow.com/questions/32836844/android-recyclerview-findviewholderforadapterposition-returns-null) – yennsarah

+0

@Amy嗨'notifyDataSetChanged()'不在我的代碼我忘了刪除它在問題中,但它不在我的代碼中。所以這不是問題 –

回答

0

,你可以這樣做:

myRecyclerView.postDelayed(new Runnable() 
      { 
       @Override 
       public void run() 
       { 
        if(myRecyclerView.findViewHolderForAdapterPosition(0)!=null) 
        { 

         RecyclerView.ViewHolder visibleViewHolder=myRecyclerView.findViewHolderForAdapterPosition(0); 
        } 
       } 
      },50);