Hallo. Ich schreibe so etwas zum ersten Mal, also weiß ich nicht, was ich tun soll, aber danke.
Ich habe ListView in einer Android-App verwendet ↓ Ich möchte das Koordinatorlayout verwenden ↓ Verwenden wir RecyclerView ↓ Ich kann die Kopf- und Fußzeile nicht anhängen ↓ Ich habe einen Adapter erstellt, damit ich eine Kopf- und eine Fußzeile anbringen kann ↑ Ich werde den Adapter vorstellen, den ich zu diesem Zeitpunkt gemacht habe. (Ich habe es auf GitHub gestellt.) Ich hoffe es hilft jemandem. (Ich frage mich, ob es bereits existiert) Es tut mir leid, wenn etwas nicht stimmt. : bow_tone1:
//Stellen Sie den Adapter her, den Sie verwenden möchten
MyAdapter adapter = new MyAdapter();
//Machen Sie PaneRecyclerViewAdapter
PaneRecyclerViewAdapter paneRecyclerViewAdapter = new PaneRecyclerViewAdapter(adapter); //Ich gebe dir einen Adapter
//Wenn es GridView ist, gebe ich Ihnen LayoutManager
//paneRecyclerViewAdapter.setGridLayoutManager(gridLayoutManager);
//Geben Sie einen Blick auf die Kopf- und Fußzeile
paneRecyclerViewAdapter.setHeaderView(headerView);
paneRecyclerViewAdapter.setFooterView(footerView);
//Fügen Sie PaneRecyclerVieAdapter zu RecyclerView hinzu
recyclerView.setAdapter(paneRecyclerViewAdapter);
Holen Sie sich den Hauptadapter in den Konstruktor. Lassen Sie diesen Kerl im Grunde genommen seitwärts gehen.
public PaneRecyclerViewAdapter(RecyclerView.Adapter adapter) {
mAdapter = adapter;
}
Sortieren Sie die Typen entsprechend.
@Override
public int getItemViewType(int position) {
if(isHeader(position)) {
return ITEM_VIEW_TYPE_HEADER;
}
if(isFooter(position)) {
return ITEM_VIEW_TYPE_FOOTER;
}
return ITEM_VIEW_TYPE_ITEM;
}
private boolean isHeader(int position) {
return mHeaderView != null && position == 0;
}
private boolean isFooter(int position) {
int extraCount = mHeaderView != null ? 1 : 0;
return mFooterView != null && position == mAdapter.getItemCount() + extraCount;
}
Die Anzahl der Elemente wird durch Hinzufügen der Anzahl der Kopf- und Fußzeilen zurückgegeben.
@Override
public int getItemCount() {
int extraCount = 0;
if(mHeaderView != null) extraCount += 1;
if(mFooterView != null) extraCount += 1;
return mAdapter.getItemCount() + extraCount;
}
ViewHolder, ein gewöhnlicher Artikel, wird von dem Adapter erstellt, den Sie erhalten haben.
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
if(viewType == ITEM_VIEW_TYPE_HEADER) {
return new ViewHolder(mHeaderView);
}
if(viewType == ITEM_VIEW_TYPE_FOOTER) {
return new ViewHolder(mFooterView);
}
RecyclerView.ViewHolder viewHolder = mAdapter.onCreateViewHolder(parent, viewType);
return new ViewHolder(viewHolder);
}
Übrigens sieht der Ansichtshalter von Pane Recycler wie folgt aus. Gewöhnliche Gegenstände werden im ViewHolder-Rohtyp aufbewahrt und bei Bedarf übergeben. Kopf- und Fußzeile sind bereits Ansicht, es handelt sich also um einen Seitwärtsfluss.
static class ViewHolder extends RecyclerView.ViewHolder {
private RecyclerView.ViewHolder mItemViewHolder;
ViewHolder(View itemView) {
super(itemView);
}
ViewHolder(RecyclerView.ViewHolder viewHolder) {
super(viewHolder.itemView);
mItemViewHolder = viewHolder;
}
RecyclerView.ViewHolder getItemViewHolder() {
return mItemViewHolder;
}
}
OnBind bleibt auch dem Adapter überlassen, der die normalen Artikel erhalten hat. HeaderFooter hat nichts zu tun, daher sollten Sie nichts tun müssen
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
if(isHeader(position)) return;
if(isFooter(position)) return;
int extraCount = mHeaderView != null ? 1 : 0;
mAdapter.onBindViewHolder(holder.getItemViewHolder(), position - extraCount);
}
Zum Zeitpunkt von GridLayout möchte ich, dass HeaderFooter seitlich voll ist, also SpanSizeLookup? Es scheint mit gesetzt zu sein. Linear ist voller Menschen, Sie müssen also nichts tun. Ich versuche, die Einrichtung zu vereinfachen, aber wenn Sie es draußen einrichten möchten, ist dies in Ordnung. (Wenn Sie getSpanSize verwenden, das unten vorbereitet ist, sollten Sie dies im Freien tun können.)
public void setGridLayoutManager(GridLayoutManager gridLayoutManager) {
mSpanCount = gridLayoutManager.getSpanCount();
gridLayoutManager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() {
@Override
public int getSpanSize(int position) {
return PaneRecyclerViewAdapter.this.getSpanSize(position);
}
});
}
public int getSpanSize(int position) {
if(isHeader(position) || isFooter(position)) {
return mSpanCount;
}
return 1;
}
Du hättest nichts Schwieriges tun sollen. Zu dieser Zeit habe ich es jedoch geschafft, während ich Hallo sagte. Bitte lassen Sie mich wissen, wenn Sie welche haben. Entschuldigung. : walk_tone1:
Github https://github.com/syuki/PaneRecyclerViewAdapter
Recommended Posts