Рубрики
Без рубрики

База данных комнат. RecyclerView Часть 1

Вступление Эта серия будет посвящена основам Android Room library…. С тегами java, android, tristan.

  • Эта серия будет посвящена основам Android Room library. Я буду следовать официальному руководству Google, ЗДЕСЬ но я буду работать в том порядке, который имеет для меня больше смысла.

На пару слов

  • Этот пост и следующий пост будут частями 1 и 2, описывающими, как мы настраиваем RecyclerView для использования с базой данных Room.

Что такое RecyclerView

  • RecyclerView позволяет легко и эффективно отображать большие наборы данных. Все, что нам нужно сделать, это предоставить данные и то, как будет выглядеть каждый элемент данных, а библиотека RecyclerView динамически создает элементы, когда они необходимы.
  • Как следует из названия, RecyclerView перерабатывает эти отдельные элементы, когда элемент прокручивается с экрана, RecyclerView не уничтожает его вид. Вместо этого RecyclerView повторно использует представление для новых элементов, прокрученных на экране. Это повторное использование значительно повышает быстродействие наших приложений и снижает энергопотребление.
  • По сути, RecyclerView – это класс, который значительно упрощает отображение данных.

Ключевые части RecyclerView

  • Существует 4 основных класса, которые RecyclerView использует для создания динамического списка для нас. В этом посте будет рассматриваться только ViewHolder

1) Группа просмотра: RecyclerView – это группа представлений, которая будет содержать представления, соответствующие нашим данным. Это само представление, поэтому добавьте RecyclerView в свой макет так же, как и любой другой компонент пользовательского интерфейса, динамически или через XML.

2) Владелец просмотра: Каждый отдельный элемент в этом списке определяется объектом ViewHolder. Когда создается ViewHolder, с ним не связано никаких данных. После создания ViewHolder RecyclerView привязывает его к своим данным. Вы определяете ViewHolder, расширяя RecyclerView. Держатель вида.

3) Адаптер: RecyclerView запрашивает эти представления и привязывает представления к их данным, вызывая методы в адаптере. Мы определяем адаптер, расширяя RecyclerView. Адаптер.

4) Менеджер компоновки: Менеджер компоновки упорядочивает отдельные элементы в нашем динамическом списке и выполняет ряд оптимизаций. Мы можем использовать один из менеджеров компоновки, предоставленных нам библиотекой RecyclerView.

  • Итак, просто краткое резюме: нам нужно 4 вещи, чтобы иметь успешный RecyclerView

1) Группа просмотра: Добавьте RecyclerView в пользовательский интерфейс. 2) Владелец просмотра: Представляет отдельные элементы. 3) Адаптер: Запрашивает и связывает данные. 4) Менеджер компоновки: Определяет макет нашего RecyclerView.

  • RecyclerView на самом деле намного сложнее, и я настоятельно рекомендую вам прочитать об этом подробнее ЗДЕСЬ

Создание держателя представления

  • Для начала создайте новый класс и назовите его Word ViewHolder.
  • Помните, что этот класс будет использоваться для представления наших отдельных элементов внутри списка RecyclerView.
  • Также можно найти XML-файлы, которые я использую ЗДЕСЬ .
  • С учетом сказанного, давайте посмотрим на некоторый код.
public class WordViewHolder extends RecyclerView.ViewHolder{
    private final TextView wordItemView;

    public WordViewHolder( View itemView) {
        super(itemView);
        wordItemView = itemView.findViewById(R.id.textView);
    }

    public void bind(String text){
        wordItemView.setText(text);
    }

    static WordViewHolder create(ViewGroup parent){
        View view = LayoutInflater.from(parent.getContext())
                .inflate(R.layout.recyclerview_item,parent,false);
        return new WordViewHolder(view);
    }
}
  • Теперь, когда мы видим вставленный выше код, давайте пройдемся по нему строка за строкой.

публичный класс Word ViewHolder расширяет RecyclerView. ViewHolder{}

  • Первое, что мы должны сделать, это extends RecyclerView. Держатель вида. Это обязательно, и именно так система распознает, что этот класс будет использоваться для нашего объекта ViewHolder. Как только вы это сделаете, вы заметите ошибку, в которой говорится:

В ViewHolder нет конструктора по умолчанию, доступного для ViewHolder

  • Так почему же мы получаем эту ошибку? Что ж, чтобы ответить на этот вопрос, вы должны понять две вещи, которые компилятор Java делает автоматически для нас:

1)Автоматический конструктор: Поскольку мы еще не определили конструктор, компилятор java создаст для нас конструктор по умолчанию без аргументов.

2)Автоматический супер(): При использовании расширяет , если мы не определим вызов super() в конструкторе (это должна быть первая строка), компилятор вставит для нас значение по умолчанию без аргумента super().

  • Итак, просто создав класс и используя extends компилятор Java автоматически создает это для нас:
public WordViewHolder() {
        super();
    }
  • super() – это то, как мы вызываем конструктор в суперклассе поэтому, когда мы вызываем super() , мы вызываем конструктор ViewHolder. Почему компилятор делает это за нас? Ну, это сделано для того, чтобы уменьшить количество ошибок во время выполнения и вместо этого дать нам ошибки во время компиляции, с которыми гораздо приятнее и легче иметь дело.

-Чтобы исправить эту ошибку, просто наведите указатель мыши на красный индикатор ошибки и нажмите создать конструктор, соответствующий super . Это автоматически создаст нужный нам конструктор.

  • Причина, по которой мы можем получить доступ к ViewHolder через RecyclerView. ViewHolder – это потому, что ViewHolder – это статический класс, вложенный внутри класса RecyclerView. Статический вложенный класс действует точно так же, как обычный класс, с той лишь разницей, что мы должны получить к нему доступ через окружающий класс.

частный окончательный вид рабочего элемента TextView;

  • Это переменная экземпляра, предназначенная для хранения ссылки на TextView, который мы создали в отдельном файле .XML для нашего индивидуального представления. Эта переменная будет использоваться для хранения информации из нашего списка, которую мы в конечном итоге будем использовать для отображения на экране.

публичное слово ViewHolder( Просмотр ItemView){}

  • Это наш конструктор для этого класса, и он принимает один аргумент типа Смотреть . Этот вид на самом деле будет увеличенным видом нашего отдельного элемента. В этом конструкторе мы вызываем super(ItemView); , как мы обсуждали ранее, это вызовет конструктор ViewHolder. word ItemView.findViewById(R.id.TextView); будет использоваться для поиска TextView нашего расширенного представления и присвоения его переменной экземпляра с именем wordItemView

публичная пустая привязка (текстовая строка){}

  • Несмотря на то, что этот метод вызывается bind , на самом деле это просто метод установки для переменной wordItemView . Как вы можете видеть, он принимает аргумент типа String, а затем мы используем эту строку для установки нашей переменной экземпляра, например word ItemView.setText(текст) ;

статическое слово ViewHolder create(родительская группа просмотра)

  • Обратите внимание, что мы определили это как статический метод. Мы делаем это для того, чтобы мы могли использовать этот метод без необходимости создавать экземпляр нашего класса Word ViewHolder. Далее обратите внимание, что мы передаем ему аргумент типа ViewGroup , ViewGroup – это просто Представление, которое используется для хранения других представлений. parent в данном случае на самом деле является нашим RecyclerView.

  • Тогда у нас есть LayoutInflater который используется для превращения файлов .XML в реальный пользовательский интерфейс. Поэтому в любое время, когда вы видите LayoutInflater, знайте, что пользовательский интерфейс вот-вот будет создан. .from(parent.getContext () использует контекст из родительского аргумента для возврата фактического LayoutInflater. Теперь мы можем вызвать .inflate () , ()

1) Ресурс: Первый параметр – это идентификатор XML-файла макета, который будет увеличен.

2) Корень: Это родительский элемент нашего раздутого представления, и мы действительно можем оставить его нулевым, поскольку attachToRoot имеет значение false. Однако, поскольку учебное пособие, которое я использую, не оставляет его пустым, я также не оставлю его пустым.

3) attachToRoot: Логическое значение , указывающее , следует ли присоединять это раздутое представление к root . Для нас корень – это наша родительская переменная. Мы устанавливаем это значение в false, чтобы указать, что мы хотим, чтобы RecyclerView прикреплял его, а не этот метод.

  • Наконец, мы вызываем return newWord ViewHolder(view); который возвращает новый экземпляр нашего класса Word ViewHolder. Весь этот метод будет активно использоваться нашим классом адаптера, как вы увидите в следующем посте
  • Спасибо, что нашли время в свой рабочий день, чтобы прочитать этот мой пост в блоге. Если у вас есть какие-либо вопросы или сомнения, пожалуйста, прокомментируйте ниже или свяжитесь со мной по адресу Твиттер .

Оригинал: “https://dev.to/theplebdev/room-database-recyclerview-part-1-fc6”