2016-03-30 7 views
0

Ich mag Viewholder des ersten vollständig sichtbaren Elements meiner RecyclerView mit diesem Code erhalten:Android findViewHolderForAdapterPostion null zurück

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); 

In diesem Fall visibleViewHolder null ist.

habe ich auch versucht findViewHolderForAdapterPosition mit Zahlen von 0 bis 7 (meine Datenmenge ist von 0 bis 7 mit 8 Daten) und wieder habe ich null;

jede Lösung?

+0

Da Sie rufen 'notifyDataSetChanged()', bevor Sie es, Sie bekommen 'null', da das Layout noch nicht bereit ist. "Beachten Sie, dass sich die Position des ViewHolders bei der Änderung des Adapterinhalts erst bei der nächsten Layoutberechnung ändert. Wenn noch Adapteraktualisierungen anstehen, stimmt der Rückgabewert dieser Methode möglicherweise nicht mit dem Adapterinhalt überein. Sie können #getAdapterPosition() verwenden, um den aktuellen Wert abzurufen Adapterposition eines ViewHolders. "[doc] (https://developer.android.com/intl/zh-cn/reference/android/support/v7/widget/RecyclerView.html#findViewHolderForAdapterPosition (int)) – yennsarah

+1

Mögliches Duplikat von [Android recyclerView findViewHolderForAdapterPosition gibt null zurück] (http://stackoverflow.com/questions/32836844/android-recyclerview-findviewholderforadapterposition-returns-null) – yennsarah

+0

@Amy Hallo 'notifyDataSetChanged()' war nicht bei meinem Code Ich habe vergessen, es zu entfernen in der Frage, aber es ist nicht bei meinem Code. Also ist es nicht das Problem –

Antwort

0

Sie können dies tun:

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

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