sadr0b0t / yashlang

PeerTube and YouTube player for Android with local playlists and whitelisted recommendations
GNU General Public License v3.0
51 stars 3 forks source link

Do not treat position as fixed #124

Closed sadr0b0t closed 2 years ago

sadr0b0t commented 2 years ago

При редактировании кода внутри адаптеров среда показывает ошибку (при компиляции не вылезает)

Do not treat position as fixed; only use immediately and call holder.getAdapterPosition() to look it up later

вот в этом месте (подчеркивает красным параметр position):

public void onBindViewHolder(@NonNull final StreamCacheViewHolder holder, final int position) {
        final StreamCache item = getItem(position);
...
        holder.itemView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(final View view) {
                if (onItemClickListener != null) {
                    onItemClickListener.onItemClick(view, position, item);
                }
            }
        });
}

Проблема в том, что эта переменная используется внутри колбэка на долгом клике, который может произойти сильно позже вызова onBindViewHolder.

вот здесь какие-то объяснения https://stackoverflow.com/questions/34942840/lint-error-do-not-treat-position-as-fixed-only-use-immediately

предлагают вместо обращения к position использовать holder.getAdapterPosition. Но он deprecated. Вместо него есть что-то похожее holder.getBindingAdapterPosition().

Если заменить внутри колбэка обращение к position на holder.getBindingAdapterPosition() проблема исчезает

        holder.itemView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(final View view) {
                if (onItemClickListener != null) {
                    onItemClickListener.onItemClick(view, holder.getBindingAdapterPosition(), item);
                }
            }
        });

Но нужно еще постировать - не поломаются ли в списках контекстный всплывающие меню на видеороликах (стоит перед этим промотать список подальше).

sadr0b0t commented 2 years ago

исправил где-то в этих тикетах в коммитах:

https://github.com/sadr0b0t/yashlang/issues/8#issuecomment-1170515348 https://github.com/sadr0b0t/yashlang/issues/129