Пример

Задача

Съставете списък с контакти

Annotation 2020-03-25 102631

  1. Трябва да се добви зависимост за RecyclerView

dependencies {
    ...
    implementation 'androidx.recyclerview:recyclerview:1.1.0'
    ...
}
  1. Добавяне на RecyclerView в activity_main.xml

Annotation 2020-03-25 102631_1

  1. Създаване на изглед за елементите в RecyclerView

layout -> new -> XML -> layout XML file

Поставете две TextView. Направете layout_height да е wrap_content виок колкото съдържанието в него.

image

  1. Създаите класове

image

  • Contact

public class Contact {
    private String name;
    private long number;

    public Contact(String name, long number) {
        this.name = name;
        this.number = number;
    }

    public String getName() {
        return name;
    }

    public long getNumber() {
        return number;
    }
}
  • ContactSource

public class ContactSource {
    public static ArrayList<Contact> generateContactList(int count) {
        ArrayList<Contact> contacts = new ArrayList<Contact>();

        Random random = new Random();

        for (int i = 1; i <= count; i++) {
            contacts.add(new Contact("Person " + i, 1000000000L + random.nextLong() % 9999999999L ));
        }

        return contacts;
    }
}
  • ContactViewHolder

public class ContactViewHolder extends RecyclerView.ViewHolder {
    private TextView name;
    private TextView phone;

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

        // Извлича визуалните елементи от изгледа
        name = itemView.findViewById(R.id.textView);
        phone = itemView.findViewById(R.id.textView2);
    }

    public TextView getName() {
        return name;
    }

    public void setName(String name) {
        this.name.setText(name);
    }

    public TextView getPhone() {
        return phone;
    }

    public void setPhone(String phone) {
        this.phone.setText(phone);
    }
}
  • ContactAdapter

public class ContactAdapter extends RecyclerView.Adapter<ContactViewHolder> {

    private List<Contact> contacts;
    private Context context;

    public ContactAdapter(List<Contact> contacts) {
        this.contacts = contacts;
    }

    @NonNull
    @Override
    public ContactViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        //извлича контекста където се намира RecyclerView
        context = parent.getContext();
        LayoutInflater inflater = LayoutInflater.from(context);

        // Извлича персонализиран изглед
        View contactView = inflater.inflate(R.layout.contact_item, parent, false);

        // Създава viewHolder обект
        ContactViewHolder viewHolder = new ContactViewHolder((contactView));

        return viewHolder;
    }
    // Свързва данните с изгледа
    @Override
    public void onBindViewHolder(@NonNull ContactViewHolder holder, int position) {
        // Взима текущия елемент от колекцията
        Contact contact = contacts.get(position);

        // Поставя стоиност на TextView за име
        holder.setName(contact.getName());
        // Поставя стоиност на TextView за телефон
        holder.setPhone(Long.toString(contact.getNumber()));
        // Поставя слушател за натискане на елемент от списъка
        holder.itemView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(context, contact.getName() + ": " + contact.getNumber(), Toast.LENGTH_SHORT).show();
            }
        });

    }
    //Връща размера на колекцията
    @Override
    public int getItemCount() {
        return contacts.size();
    }
}
  • Използване в MainActivity

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        //извлича RecyclerView
        RecyclerView recyclerView = (RecyclerView) findViewById(R.id.rv);
        //Създава адаптер
        ContactAdapter adapter = new ContactAdapter(ContactSource.generateContactList(10));
        // Поставя адаптер на RecyclerView
        recyclerView.setAdapter(adapter);
        // Поставя мениджър на изгледа
        recyclerView.setLayoutManager(new LinearLayoutManager(this));
    }
}

Last updated

Was this helpful?