Далі наведено мінімальний приклад, який буде мати вигляд наступного зображення.
Почніть з порожньої діяльності. Ви будете виконувати такі завдання, щоб додати RecyclerView. Все, що вам потрібно зробити, - скопіювати та вставити код у кожен розділ. Пізніше ви можете налаштувати його під свої потреби.
- Додайте залежності до gradle
- Додайте файли макета xml для активності та для рядка RecyclerView
- Зробіть адаптер RecyclerView
- Ініціалізуйте RecyclerView у своїй діяльності
Оновіть залежності Gradle
Переконайтеся, що у gradle.build
файлі додатка є такі залежності :
implementation 'com.android.support:appcompat-v7:28.0.0'
implementation 'com.android.support:recyclerview-v7:28.0.0'
Ви можете оновити номери версій до тих, що є найбільш актуальними . Використовуйте, compile
а не implementation
якщо ви все ще використовуєте Android Studio 2.x.
Створіть макет діяльності
Додайте RecyclerView
до вашого формату XML.
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.v7.widget.RecyclerView
android:id="@+id/rvAnimals"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</RelativeLayout>
Створення макета рядків
Кожен рядок у нас RecyclerView
буде мати лише один TextView
. Створіть новий файл ресурсу макета.
recilerview_row.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:padding="10dp">
<TextView
android:id="@+id/tvAnimalName"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="20sp"/>
</LinearLayout>
Створіть адаптер
Для RecyclerView
заповнення представлень даних у кожному рядку вашими даними потрібен адаптер. Створіть новий файл Java.
MyRecyclerViewAdapter.java
public class MyRecyclerViewAdapter extends RecyclerView.Adapter<MyRecyclerViewAdapter.ViewHolder> {
private List<String> mData;
private LayoutInflater mInflater;
private ItemClickListener mClickListener;
// data is passed into the constructor
MyRecyclerViewAdapter(Context context, List<String> data) {
this.mInflater = LayoutInflater.from(context);
this.mData = data;
}
// inflates the row layout from xml when needed
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = mInflater.inflate(R.layout.recyclerview_row, parent, false);
return new ViewHolder(view);
}
// binds the data to the TextView in each row
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
String animal = mData.get(position);
holder.myTextView.setText(animal);
}
// total number of rows
@Override
public int getItemCount() {
return mData.size();
}
// stores and recycles views as they are scrolled off screen
public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
TextView myTextView;
ViewHolder(View itemView) {
super(itemView);
myTextView = itemView.findViewById(R.id.tvAnimalName);
itemView.setOnClickListener(this);
}
@Override
public void onClick(View view) {
if (mClickListener != null) mClickListener.onItemClick(view, getAdapterPosition());
}
}
// convenience method for getting data at click position
String getItem(int id) {
return mData.get(id);
}
// allows clicks events to be caught
void setClickListener(ItemClickListener itemClickListener) {
this.mClickListener = itemClickListener;
}
// parent activity will implement this method to respond to click events
public interface ItemClickListener {
void onItemClick(View view, int position);
}
}
Примітки
- Хоча це і не є суворо необхідним, я включив функціональність для прослуховування подій клацання по рядках. Це було по-старому
ListViews
і є загальною потребою. Ви можете видалити цей код, якщо він вам не потрібен.
Ініціалізуйте RecyclerView у діяльності
Додайте наступний код до своєї основної діяльності.
MainActivity.java
public class MainActivity extends AppCompatActivity implements MyRecyclerViewAdapter.ItemClickListener {
MyRecyclerViewAdapter adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// data to populate the RecyclerView with
ArrayList<String> animalNames = new ArrayList<>();
animalNames.add("Horse");
animalNames.add("Cow");
animalNames.add("Camel");
animalNames.add("Sheep");
animalNames.add("Goat");
// set up the RecyclerView
RecyclerView recyclerView = findViewById(R.id.rvAnimals);
recyclerView.setLayoutManager(new LinearLayoutManager(this));
adapter = new MyRecyclerViewAdapter(this, animalNames);
adapter.setClickListener(this);
recyclerView.setAdapter(adapter);
}
@Override
public void onItemClick(View view, int position) {
Toast.makeText(this, "You clicked " + adapter.getItem(position) + " on row number " + position, Toast.LENGTH_SHORT).show();
}
}
Примітки
- Зауважте, що діяльність реалізує те,
ItemClickListener
що ми визначили в нашому адаптері. Це дозволяє нам обробляти події клацання рядків у onItemClick
.
Готово
Це воно. Ви повинні мати можливість запустити свій проект зараз і отримати щось подібне до зображення у верхній частині.
Продовжувати
Додавання роздільника між рядками
Ви можете додати простий подільник, як це
DividerItemDecoration dividerItemDecoration = new DividerItemDecoration(recyclerView.getContext(),
layoutManager.getOrientation());
recyclerView.addItemDecoration(dividerItemDecoration);
Якщо вам потрібно щось трохи складніше, дивіться наступні відповіді:
Зміна кольору рядка при натисканні
Дивіться цю відповідь, як змінити колір тла та додати ефект Ripple при натисканні на рядок.
Оновлення рядків
Дивіться цю відповідь, як додати, видалити та оновити рядки.
Подальше читання