6

Z jakiegoś powodu nie jestem w stanie użyć holder.getAdapterPosition(), ponieważ zawsze zwraca -1, ale holder.getLayoutPosition() zwraca pozycję dobrze.viewHolder.getAdapterPosition() zawsze zwraca -1

Moja onCreateViewHolder:

@Override

public ViewHolder onCreateViewHolder(ViewGroup parent, 
            int viewType) { 
    // create a new view 
    View v = LayoutInflater.from(parent.getContext()) 
      .inflate(R.layout.my_item, parent, false); 


    ViewHolder vh = new ViewHolder(this, v); 
    return vh; 
} 

My ViewHolder konstruktor:

public ViewHolder(DirectoryListAdapter adapter, View linear) { 
      super(linear); 
      this.adapter = adapter; 
      this.linear = (LinearLayout) linear; 
      this.entryName = (TextView) linear.findViewById(R.id.item_name); 
      this.entryImage = (ImageView) linear.findViewById(R.id.item_image); 

} 

spojrzałem nieco dalej i getAdapterPosition wygląda następująco:

public final int getAdapterPosition() { 
      final ViewParent parent = itemView.getParent(); 
      if (!(parent instanceof RecyclerView)) { 
       return -1; 
      } 
      final RecyclerView rv = (RecyclerView) parent; 
      return rv.getAdapterPositionFor(this); 
     } 

Zasadniczo, co się dzieje, jest to, że ViewParent ma wartość null. Jakiś pomysł, dlaczego tak się dzieje?

Poza tym mój recykler działa dobrze.

Dzięki.

Odpowiedz

0

To nie wydaje się być problemem w nowej wersji biblioteki wsparcia (22.1.0).

1

Jeśli rodzic ma wartość zerową, oznacza to, że ViewHolder nie jest dzieckiem z RecyclerView, w związku z czym nie śledziliśmy jego pozycji. Pozycja układu to jego ostatnia pozycja, gdy została ona ułożona.

W poniższych wydaniach rozszerzymy zakres funkcji getAdapterPosition.

+1

Czy robię coś złego? powinienem ustawić rodzica? – casolorz

Powiązane problemy