Tổng quan
RecyclerView là phiên bản nâng cấp của ListView, hoạt động dựa trên ViewHolder pattern. Hỗ trợ hiển thị cả danh sách (list) và lưới (grid).
Ví dụ cơ bản nhất: xây dựng app danh sách sinh viên (tên, tuổi) với RecyclerView đơn giản.
Các bước
Bước 1-2: Tạo project & thêm dependency recyclerview-v7
Bước 3: activity_main.xml
<RelativeLayout ...>
<android.support.v7.widget.RecyclerView
android:id="@+id/recycler_view"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:scrollbars="vertical" />
</RelativeLayout>
Bước 4: MainActivity.java
public class MainActivity extends AppCompatActivity {
private RecyclerView recyclerView;
private StudentAdapter studentAdapter;
private List<StudentData> studentDataList = new ArrayList<>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
recyclerView = findViewById(R.id.recycler_view);
studentAdapter = new StudentAdapter(studentDataList);
recyclerView.setLayoutManager(new LinearLayoutManager(this));
recyclerView.addItemDecoration(new DividerItemDecoration(this, LinearLayoutManager.VERTICAL));
recyclerView.setAdapter(studentAdapter);
prepareStudentData();
}
private void prepareStudentData() {
studentDataList.add(new StudentData("Sai", 25));
studentDataList.add(new StudentData("Sai", 25));
studentDataList.add(new StudentData("Raghu", 20));
studentDataList.add(new StudentData("Raj", 28));
studentDataList.add(new StudentData("Amar", 15));
studentDataList.add(new StudentData("Bapu", 19));
studentDataList.add(new StudentData("Chandra", 52));
studentDataList.add(new StudentData("Deraj", 30));
studentDataList.add(new StudentData("Eshanth", 28));
// Không sắp xếp trong ví dụ này
}
}
Bước 5: StudentAdapter.java (cơ bản nhất)
class StudentAdapter extends RecyclerView.Adapter<StudentAdapter.MyViewHolder> {
private List<StudentData> studentDataList;
public StudentAdapter(List<StudentData> studentDataList) {
this.studentDataList = studentDataList;
}
@NonNull @Override
public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext())
.inflate(R.layout.student_list_row, parent, false);
return new MyViewHolder(view);
}
@Override
public void onBindViewHolder(MyViewHolder holder, int position) {
StudentData data = studentDataList.get(position);
holder.name.setText(data.name);
holder.age.setText(String.valueOf(data.age));
}
@Override public int getItemCount() { return studentDataList.size(); }
static class MyViewHolder extends RecyclerView.ViewHolder {
TextView name, age;
public MyViewHolder(View itemView) {
super(itemView);
name = itemView.findViewById(R.id.name);
age = itemView.findViewById(R.id.age);
}
}
}
Bước 6: Layout item (LinearLayout ngang, 2 TextView weight 0.5)
<LinearLayout android:orientation="horizontal" android:weightSum="1" ...>
<TextView android:id="@+id/name" android:layout_width="0dp" android:layout_weight="0.5" ... />
<TextView android:id="@+id/age" android:layout_width="0dp" android:layout_weight="0.5" ... />
</LinearLayout>
Bước 7: StudentData.java
class StudentData {
String name; int age;
public StudentData(String name, int age) { this.name=name; this.age=age; }
}
Kết quả
Màn hình danh sách cơ bản có đường phân cách:

Cuộn xuống:
