RecyclerView добавление элемента onclickListener () + таймеры оптимизации - PullRequest
0 голосов
/ 17 октября 2018

Я хочу добавить 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 ]

0 голосов
/ 17 октября 2018

Jerky Scrolling

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

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

Вместо добавления слушателя в ViewHolder, сделайте его переменной класса в вашем адаптере RecyclerView.

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

Создать прослушиватель

interface ClickListener{

       void click();

}

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

YourActivity implements ClickListener{

}

Введите этот слушатель в свой адаптер

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

      }

}

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

0 голосов
/ 17 октября 2018

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

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