RecyclerView добавление Item onclickListener () + оптимизация таймеров

Я хочу добавить onClickListener в элементы в моем RecyclerView. Я добавил слушателя в класс Holder следующим образом:

public class Holder extends RecyclerView.ViewHolder {

    TextView firstName;
    TextView lastName;

    public Holder (final View itemView) {
        super(itemView);
        firstName = itemView.findViewById(R.id.firstName );
        lastName= itemView.findViewById(R.id.lastName);
        itemView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                //Do work
             }
        }
    }

Но, я думаю, это приведет к тому, что прокрутка списка будет немного отрывистой и не идеально гладкой на старых устройствах.

Вопрос 1: Есть ли лучший способ сделать это? Или как я могу оптимизировать свой код?

Вопрос 2: Я намерен добавить динамически меняющуюся переменную для каждого элемента в списке, такого как таймер, и я не хочу, чтобы прокрутка была слишком медленной! Как мне лучше всего настроить таймеры?

Всего 2 ответа


Создайте переменную-член для элемента OnClickListener и установите его в конструкторе Holder.It будет одним слушателем в вашем адаптере, когда приложение будет запущено.


Прокрутка Jerky

Поскольку вы используете RecyclerView, я не думаю, что вы столкнетесь с любой проблемой при прокрутке, потому что RecyclerView по своей сути поставляется с шаблоном ViewHolder. (В случае Simple listView вы должны сделать ViewHolder, чтобы избежать отрывной прокрутки)

Улучшение кода

Вместо добавления Listener в ViewHolder сделайте его переменной Class в адаптере RecyclerView.

Существует стандартный способ добавления прослушивателя в RecyclerView

Создать слушателя

interface ClickListener{

       void click();

}

внедрить этого слушателя в свою деятельность

YourActivity implements ClickListener{

}

Typecast этот слушатель в вашем адаптере

YourAdapter extends RecyclerView.Adapter<YourAdapter.Holder>{

    ClickListener listener; 

    public YourAdapter(Context context)
    {
        this.context = context;

        listener = (ClickListener)context;
    }


    public class Holder extends RecyclerView.ViewHolder {

         TextView firstName;
         TextView lastName;

          public Holder (final View itemView) {
              super(itemView);
              firstName = itemView.findViewById(R.id.firstName );
              lastName= itemView.findViewById(R.id.lastName);

    }

    // Item Click listener goes here.

    @Override
    public void onBindViewHolder(DownLoadViewHolder holder, final int position) {
            // Do something
            listener.click(); 

      }

}

Просто дайте вам обзор. Вы можете увидеть ЭТО для справки.


Есть идеи?

10000