Kurze Antwort
Für diejenigen , die bereits vertraut sind mit der Einrichtung ein RecyclerView
eine Liste zu machen , ist die gute Nachricht , dass ein Gitter zu machen ist weitgehend gleich. Sie verwenden beim Einrichten einfach a GridLayoutManager
anstelle von a .LinearLayoutManager
RecyclerView
recyclerView.setLayoutManager(new GridLayoutManager(this, numberOfColumns));
Wenn Sie mehr Hilfe benötigen, sehen Sie sich das folgende Beispiel an.
Vollständiges Beispiel
Das Folgende ist ein minimales Beispiel, das wie im Bild unten aussieht.
Beginnen Sie mit einer leeren Aktivität. Sie werden die folgenden Aufgaben ausführen , die hinzuzufügen RecyclerView
Raster. Sie müssen lediglich den Code in jeden Abschnitt kopieren und einfügen. Später können Sie es an Ihre Bedürfnisse anpassen.
- Fügen Sie dem Gradle Abhängigkeiten hinzu
- Fügen Sie die XML-Layoutdateien für die Aktivität und für die Rasterzelle hinzu
- Stellen Sie den RecyclerView-Adapter her
- Initialisieren Sie die RecyclerView in Ihrer Aktivität
Aktualisieren Sie Gradle-Abhängigkeiten
Stellen Sie sicher, dass die folgenden Abhängigkeiten in Ihrer App- gradle.build
Datei enthalten sind:
compile 'com.android.support:appcompat-v7:27.1.1'
compile 'com.android.support:recyclerview-v7:27.1.1'
Sie können die Versionsnummern auf die aktuellsten aktualisieren .
Aktivitätslayout erstellen
Fügen Sie das RecyclerView
Ihrem XML-Layout hinzu.
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>
Erstellen Sie ein Rasterzellenlayout
Jede Zelle in unserem RecyclerView
Raster wird nur eine einzige haben TextView
. Erstellen Sie eine neue Layoutressourcendatei.
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>
Erstellen Sie den Adapter
Sie RecyclerView
benötigen einen Adapter, um die Ansichten in jeder Zelle mit Ihren Daten zu füllen. Erstellen Sie eine neue Java-Datei.
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);
}
}
Anmerkungen
- Obwohl dies nicht unbedingt erforderlich ist, habe ich die Funktionalität zum Abhören von Klickereignissen in den Zellen hinzugefügt. Dies war in der alten verfügbar
GridView
und ist ein allgemeines Bedürfnis. Sie können diesen Code entfernen, wenn Sie ihn nicht benötigen.
Initialisieren Sie RecyclerView in Aktivität
Fügen Sie Ihrer Hauptaktivität den folgenden Code hinzu.
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);
}
}
Anmerkungen
- Beachten Sie, dass die Aktivität das implementiert
ItemClickListener
, was wir in unserem Adapter definiert haben. Dies ermöglicht es uns, Zellklickereignisse in zu verarbeiten onItemClick
.
Fertig
Das ist es. Sie sollten jetzt in der Lage sein, Ihr Projekt auszuführen und etwas Ähnliches wie das Bild oben zu erhalten.
Weiter geht's
Abgerundete Ecken
Automatisch passende Säulen
Weitere Studie