Câu trả lời ngắn
Đối với những người đã quen thuộc với việc thiết lập RecyclerView
một danh sách , tin tốt là việc tạo lưới phần lớn giống nhau. Bạn chỉ cần sử dụng GridLayoutManager
thay vì một LinearLayoutManager
khi bạn thiết RecyclerView
lập.
recyclerView.setLayoutManager(new GridLayoutManager(this, numberOfColumns));
Nếu bạn cần trợ giúp nhiều hơn thế, hãy xem ví dụ sau.
Ví dụ đầy đủ
Sau đây là một ví dụ tối thiểu sẽ trông giống như hình ảnh dưới đây.
Bắt đầu với một hoạt động trống rỗng. Bạn sẽ thực hiện các tác vụ sau để thêm RecyclerView
lưới. Tất cả bạn cần làm là sao chép và dán mã trong mỗi phần. Sau này bạn có thể tùy chỉnh nó để phù hợp với nhu cầu của bạn.
- Thêm phụ thuộc vào lớp
- Thêm tệp bố cục xml cho hoạt động và cho ô lưới
- Tạo bộ điều hợp RecyclerView
- Khởi tạo RecyclerView trong hoạt động của bạn
Cập nhật phụ thuộc Gradle
Đảm bảo các phụ thuộc sau có trong gradle.build
tệp ứng dụng của bạn :
compile 'com.android.support:appcompat-v7:27.1.1'
compile 'com.android.support:recyclerview-v7:27.1.1'
Bạn có thể cập nhật số phiên bản thành bất cứ điều gì mới nhất .
Tạo bố cục hoạt động
Thêm vào RecyclerView
bố cục xml của bạn.
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/rvNumbers"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</RelativeLayout>
Tạo bố trí ô lưới
Mỗi ô trong RecyclerView
lưới của chúng tôi sẽ chỉ có một TextView
. Tạo một tệp tài nguyên bố cục mới.
recyclerview_item.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:padding="5dp"
android:layout_width="50dp"
android:layout_height="50dp">
<TextView
android:id="@+id/info_text"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:background="@color/colorAccent"/>
</LinearLayout>
Tạo bộ chuyển đổi
Các RecyclerView
cần một bộ chuyển đổi để cư quan điểm trong mỗi tế bào với các dữ liệu của bạn. Tạo một tệp java mới.
MyRecyclerViewAd Module.java
public class MyRecyclerViewAdapter extends RecyclerView.Adapter<MyRecyclerViewAdapter.ViewHolder> {
private String[] mData;
private LayoutInflater mInflater;
private ItemClickListener mClickListener;
// data is passed into the constructor
MyRecyclerViewAdapter(Context context, String[] data) {
this.mInflater = LayoutInflater.from(context);
this.mData = data;
}
// inflates the cell layout from xml when needed
@Override
@NonNull
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = mInflater.inflate(R.layout.recyclerview_item, parent, false);
return new ViewHolder(view);
}
// binds the data to the TextView in each cell
@Override
public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
holder.myTextView.setText(mData[position]);
}
// total number of cells
@Override
public int getItemCount() {
return mData.length;
}
// 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.info_text);
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[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);
}
}
Ghi chú
- Mặc dù không thực sự cần thiết, tôi đã bao gồm chức năng nghe các sự kiện nhấp chuột trên các ô. Điều này đã có sẵn trong cái cũ
GridView
và là một nhu cầu phổ biến. Bạn có thể xóa mã này nếu bạn không cần nó.
Khởi tạo RecyclerView trong Activity
Thêm mã sau vào hoạt động chính của bạn.
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
String[] data = {"1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24", "25", "26", "27", "28", "29", "30", "31", "32", "33", "34", "35", "36", "37", "38", "39", "40", "41", "42", "43", "44", "45", "46", "47", "48"};
// set up the RecyclerView
RecyclerView recyclerView = findViewById(R.id.rvNumbers);
int numberOfColumns = 6;
recyclerView.setLayoutManager(new GridLayoutManager(this, numberOfColumns));
adapter = new MyRecyclerViewAdapter(this, data);
adapter.setClickListener(this);
recyclerView.setAdapter(adapter);
}
@Override
public void onItemClick(View view, int position) {
Log.i("TAG", "You clicked number " + adapter.getItem(position) + ", which is at cell position " + position);
}
}
Ghi chú
- Lưu ý rằng hoạt động thực hiện
ItemClickListener
mà chúng tôi đã xác định trong bộ điều hợp của chúng tôi. Điều này cho phép chúng tôi xử lý các sự kiện nhấp chuột di động trong onItemClick
.
Đã kết thúc
Đó là nó. Bạn sẽ có thể chạy dự án của bạn bây giờ và nhận được một cái gì đó tương tự như hình ảnh ở trên cùng.
Đang xảy ra
Góc tròn
Cột tự động lắp
Học cao hơn