4. Вывод контактов в адаптере

Теперь добавим функционал для вывода контактов в списке.

Модифицируем ContactHolder для хранения ссылок на элементы UI

ContactsAdapter.java
public class ContactsAdapter extends RecyclerView.Adapter<ContactsAdapter.ContactHolder> {

    ...

    static class ContactHolder extends RecyclerView.ViewHolder {
        ImageView image;
        TextView name;
        TextView email;
        TextView phone;

        public ContactHolder(@NonNull View itemView) {
            super(itemView);

            image = itemView.findViewById(R.id.contact_image);
            name = itemView.findViewById(R.id.name);
            email = itemView.findViewById(R.id.email);
            phone = itemView.findViewById(R.id.phone);
        }
    }
}

Реализуем метод onBindViewHolder(). Обратите внимание, что если список пуст, то мы сразу выходим из метода. Если не предусмотреть эту логику, то при пустом списке мы получим NullPointerException, потому что поля объекта holder будут равны null.

ContactsAdapter.java
public class ContactsAdapter extends RecyclerView.Adapter<ContactsAdapter.ContactHolder> {

    private final List<Contact> list;

    private static final int EMPTY_LIST_TYPE = 0;
    private static final int NON_EMPTY_LIST_TYPE = 1;

    @Override
    public void onBindViewHolder(@NonNull ContactHolder holder, int position) {

        if (getItemViewType(position) == EMPTY_LIST_TYPE)
            return;

        Contact contact = list.get(position);

        holder.image.setImageURI(contact.getUri());
        holder.name.setText(contact.getName());
        holder.email.setText(contact.getEmail());
        holder.phone.setText(contact.getPhone());
    }

    ...
    
}

Последний штрих - обновление адаптера при добавлении нового контакта. Вернемся в класс MainActivity.java, в методе onActivityResult() добавим вызов метода адаптера notifyDataSetChanged().

MainActivity.java
public class MainActivity extends AppCompatActivity {

    private static final int ADD_CONTACT_REQUEST_CODE = 5556;

    private List<Contact> list = new ArrayList<>();
    private ContactsAdapter adapter;

    @Override
    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
        super.onActivityResult(requestCode, resultCode, data);

        if (requestCode == ADD_CONTACT_REQUEST_CODE && resultCode == RESULT_OK && data != null) {
            String name = data.getStringExtra(Intent.EXTRA_USER);
            String email = data.getStringExtra(Intent.EXTRA_EMAIL);
            String phone = data.getStringExtra(Intent.EXTRA_PHONE_NUMBER);
            Uri uri = Uri.parse(data.getStringExtra(Intent.EXTRA_ORIGINATING_URI));

            list.add(new Contact(name, email, phone, uri));
            adapter.notifyDataSetChanged();
        }
    }
}

Проверим работу приложения

Last updated