È possibile utilizzare RecyclerView.ItemDecoration per implementare questo comportamento.
public class StickyFooterItemDecoration extends RecyclerView.ItemDecoration {
/**
* Top offset to completely hide footer from the screen and therefore avoid noticeable blink during changing position of the footer.
*/
private static final int OFF_SCREEN_OFFSET = 5000;
@Override
public void getItemOffsets(Rect outRect, final View view, final RecyclerView parent, RecyclerView.State state) {
int adapterItemCount = parent.getAdapter().getItemCount();
if (isFooter(parent, view, adapterItemCount)) {
//For the first time, each view doesn't contain any parameters related to its size,
//hence we can't calculate the appropriate offset.
//In this case, set a big top offset and notify adapter to update footer one more time.
//Also, we shouldn't do it if footer became visible after scrolling.
if (view.getHeight() == 0 && state.didStructureChange()) {
hideFooterAndUpdate(outRect, view, parent);
} else {
outRect.set(0, calculateTopOffset(parent, view, adapterItemCount), 0, 0);
}
}
}
private void hideFooterAndUpdate(Rect outRect, final View footerView, final RecyclerView parent) {
outRect.set(0, OFF_SCREEN_OFFSET, 0, 0);
footerView.post(new Runnable() {
@Override
public void run() {
parent.getAdapter().notifyDataSetChanged();
}
});
}
private int calculateTopOffset(RecyclerView parent, View footerView, int itemCount) {
int topOffset = parent.getHeight() - visibleChildsHeightWithFooter(parent, footerView, itemCount);
return topOffset < 0 ? 0 : topOffset;
}
private int visibleChildsHeightWithFooter(RecyclerView parent, View footerView, int itemCount) {
int totalHeight = 0;
//In the case of dynamic content when adding or removing are possible itemCount from the adapter is reliable,
//but when the screen can fit fewer items than in adapter, getChildCount() from RecyclerView should be used.
int onScreenItemCount = Math.min(parent.getChildCount(), itemCount);
for (int i = 0; i < onScreenItemCount - 1; i++) {
totalHeight += parent.getChildAt(i).getHeight();
}
return totalHeight + footerView.getHeight();
}
private boolean isFooter(RecyclerView parent, View view, int itemCount) {
return parent.getChildAdapterPosition(view) == itemCount - 1;
}
}
Assicurarsi di impostare match_parent per l'altezza RecyclerView.
prega di dare un'occhiata al l'applicazione di esempio https://github.com/JohnKuper/recyclerview-sticky-footer e come funziona http://sendvid.com/nbpj0806
Un inconveniente enorme di questa soluzione è che funziona correttamente solo dopo notifyDataSetChanged() in tutta l'applicazione (decorazione non all'interno). Con notifiche più specifiche non funzionerà correttamente e per supportarle, richiede un modo più logico. Inoltre, è possibile ottenere informazioni dalla biblioteca recyclerview-stickyheaders entro il eowise e migliorare questa soluzione.
si può mettere il ultimo elemento con un altro layout per la parte inferiore dello schermo e si può mettere il recyclerview a inizio it.so sarà sempre in fondo e il tuo recycleview non verrà effettuato – nomad
nomad, mi dispiace, ma non è previsto risultato: se avessi l'ultimo elemento recyclerview trasparente - così su scrollare l'ultimo elemento (il mio footer) non avrebbe un'animazione adeguata (invece di essere appiccicoso all'ultimo elemento 1 sarebbe apparire dal basso). Spero tu abbia capito la mia mente. – resource8218
checkout https://gist.github.com/mheras/0908873267def75dc746 e questa risposta SO: http://stackoverflow.com/a/29168617/3140227 –