Как получить доступ к элементам onBindViewHolder RecyclerView в действии - PullRequest
0 голосов
/ 18 октября 2019

У меня настроено recyclerView с моим adapter.. Я использовал interface, чтобы прослушивать события щелчка, которые помогают мне определить положение и вид каждого элемента.

Однако мне также необходимо получить доступ к элементам array внутри метода onBindViewHolder. Есть ли способ сделать этот метод доступным?

Интерфейс

public interface ItemClickListener {

    void onItemClick(View view, EpisodeAdapter.ViewHolder holder, int position);
}

Адаптер

 @Override
    public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
    final Episode episode = postList.get(position);
        final String title = episode.getTitle();
        final Long timeStamp = postList.get(position).getTimestamp();
        holder.setTitle(title);
//how to make this method and items accessible by my activity
    }

    @Override
    public int getItemCount() {
        return postList.size();
    }

    public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener{
        private View mView;
        private CardView mParent;
        private TextView mTitle, mMonth, mDate;
        public ViewHolder(View itemView) {
            super(itemView);
            mView = itemView;
            mTitle = mView.findViewById(R.id.title);
            mMonth = mView.findViewById(R.id.month);
            mDate = mView.findViewById(R.id.date);
            mParent = mView.findViewById(R.id.parentView);
            itemView.setOnClickListener(this);
        }

        public void setTitle(String text){
            mTitle = mView.findViewById(R.id.title);
            mTitle.setText(text);
        }
        public void setDate(String text){
            mDate = mView.findViewById(R.id.date);
            mDate.setText(text);
        }
        public void setMonth(String text){
            mMonth = mView.findViewById(R.id.month);
            mMonth.setText(text);
        }


        @Override
        public void onClick(View v) {
            if (itemClickListener != null) {
                itemClickListener.onItemClick(v,  getAdapterPosition());
            }
        }
    }

    private ItemClickListener itemClickListener;

    public void setOnItemClickListener(ItemClickListener mItemClickListener) {
        this.itemClickListener = mItemClickListener;
    }
}

Активность

adapter.setOnItemClickListener((view, position) -> {
//only view and position available. how to access view holder items
            }

1 Ответ

0 голосов
/ 18 октября 2019

Вы можете изменить подпись вашего ItemClickListener для поддержки передачи выбранного элемента в класс, реализующий ваш обратный вызов. Попробуйте изменить слушателя на что-то вроде:

public interface ItemClickListener {
    void onItemClick(YourItem item);
}

Когда вы переопределяете onClick, передайте элемент, выполнив что-то вроде

@Override
public void onClick(View v) {
    if (itemClickListener != null) {
        itemClickListener.onItemClick(postList.get(position));
    }
}

Подробнее об этой технике вы можете узнать здесь: https://antonioleiva.com/recyclerview-listener/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...