Krótka odpowiedź
Dla tych, którzy są już zaznajomieni z tworzeniem RecyclerView
listy , dobrą wiadomością jest to, że tworzenie siatki jest w dużej mierze takie samo. Podczas konfigurowania używasz GridLayoutManager
zamiast zamiast .LinearLayoutManager
RecyclerView
recyclerView.setLayoutManager(new GridLayoutManager(this, numberOfColumns));
Jeśli potrzebujesz więcej pomocy, sprawdź poniższy przykład.
Pełny przykład
Poniżej znajduje się minimalny przykład, który będzie wyglądał jak na poniższym obrazku.
Zacznij od pustej aktywności. Wykonasz następujące zadania, aby dodać RecyclerView
siatkę. Wszystko, co musisz zrobić, to skopiować i wkleić kod w każdej sekcji. Później możesz dostosować go do swoich potrzeb.
- Dodaj zależności do stopnia
- Dodaj pliki układu xml dla działania i komórki siatki
- Wykonaj adapter RecyclerView
- Zainicjuj RecyclerView w swojej aktywności
Zaktualizuj zależności Gradle
Upewnij się, że w gradle.build
pliku aplikacji znajdują się następujące zależności :
compile 'com.android.support:appcompat-v7:27.1.1'
compile 'com.android.support:recyclerview-v7:27.1.1'
Możesz zaktualizować numery wersji do najnowszej .
Utwórz układ aktywności
Dodaj RecyclerView
do swojego układu 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/rvNumbers"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</RelativeLayout>
Utwórz układ komórek siatki
Każda komórka w naszej RecyclerView
siatce będzie miała tylko jeden TextView
. Utwórz nowy plik zasobów układu.
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>
Utwórz adapter
RecyclerView
Wymaga adaptera do wypełnienia widoki w każdej komórce z danymi. Utwórz nowy plik Java.
MyRecyclerViewAdapter.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);
}
}
Notatki
- Chociaż nie jest to absolutnie konieczne, dołączyłem funkcję nasłuchiwania zdarzeń kliknięcia w komórkach. To było dostępne w dawnych czasach
GridView
i jest powszechną potrzebą. Możesz usunąć ten kod, jeśli go nie potrzebujesz.
Zainicjuj RecyclerView w działaniu
Dodaj następujący kod do swojej głównej działalności.
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);
}
}
Notatki
- Zauważ, że działanie implementuje to
ItemClickListener
, co zdefiniowaliśmy w naszym adapterze. To pozwala nam obsługiwać zdarzenia kliknięcia komórki w onItemClick
.
Skończone
Otóż to. Powinieneś być teraz w stanie uruchomić swój projekt i uzyskać coś podobnego do obrazu na górze.
Dziać się
Zaokrąglone rogi
Automatyczne dopasowanie kolumn
Dalsze badanie