6

Vì một số lý do tôi không thể sử dụng holder.getAdapterPosition() vì nó luôn trả về -1 nhưng holder.getLayoutPosition() trả về một vị trí tốt.viewHolder.getAdapterPosition() luôn trả về -1

onCreateViewHolder của tôi:

@ 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 constructor:

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

} 

Tôi nhìn một chút nữa và getAdapterPosition trông như thế này:

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

Và về cơ bản những gì đang xảy ra là ViewParent là null. Bất kỳ ý tưởng tại sao có thể?

Khác với người tái chế của tôi đang hoạt động tốt.

Cảm ơn.

Trả lời

0

Điều này dường như không phải là vấn đề đối với phiên bản mới của thư viện hỗ trợ (22.1.0).

1

Nếu cha mẹ là rỗng, nghĩa là ViewHolder không phải là con của RecyclerView do đó chúng tôi chưa theo dõi vị trí của nó. Vị trí bố trí là vị trí mới nhất của nó khi nó được đặt ra.

Trong các bản phát hành sau, chúng tôi sẽ mở rộng phạm vi của getAdapterPosition.

+1

Vì vậy, tôi đang làm điều gì đó sai? tôi có nên đặt bố mẹ không? – casolorz