Last updated
Last updated
Задача
Съставете списък с контакти
Трябва да се добви зависимост за RecyclerView
Добавяне на RecyclerView в activity_main.xml
Създаване на изглед за елементите в RecyclerView
layout -> new -> XML -> layout XML file
Поставете две TextView. Направете layout_height да е wrap_content виок колкото съдържанието в него.
Създаите класове
Contact
ContactSource
ContactViewHolder
ContactAdapter
Използване в MainActivity
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;
}
}
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;
}
}
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);
}
}
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();
}
}
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));
}
}
dependencies {
...
implementation 'androidx.recyclerview:recyclerview:1.1.0'
...
}