Um Endlos-Scroll-Muster zu implementieren, um die RecyclerView
ich eine Klasse wieWarum RecyclerView.OnScrollListener ist keine Schnittstelle, sondern eine abstrakte Klasse?
public class EndlessScrollAdapter<VH extends ViewHolder>
extends RecyclerView.Adapter<VH> implements RecyclerView.OnScrollListener {
}
erstellen möchten Da EndlessScrollAdapter
sollte für beide der Daten und blättern Event-Handling verantwortlich sein, dann ist dies der bequemste Weg, es zu implementieren.
Aber weil in recyclerview-v7-21.0.3
, OnScrollListener
wie diese
/**
* An OnScrollListener can be set on a RecyclerView to receive messages
* when a scrolling event has occurred on that RecyclerView.
*
* @see RecyclerView#setOnScrollListener(OnScrollListener)
*/
abstract static public class OnScrollListener {
/**
* Callback method to be invoked when RecyclerView's scroll state changes.
*
* @param recyclerView The RecyclerView whose scroll state has changed.
* @param newState The updated scroll state. One of {@link #SCROLL_STATE_IDLE},
* {@link #SCROLL_STATE_DRAGGING} or {@link #SCROLL_STATE_SETTLING}.
*/
public void onScrollStateChanged(RecyclerView recyclerView, int newState){}
/**
* Callback method to be invoked when the RecyclerView has been scrolled. This will be
* called after the scroll has completed.
*
* @param recyclerView The RecyclerView which scrolled.
* @param dx The amount of horizontal scroll.
* @param dy The amount of vertical scroll.
*/
public void onScrolled(RecyclerView recyclerView, int dx, int dy){}
}
kann ich nicht EndlessScrollAdapter
OnScrollListener
implementieren machen.
Also, wie der Titel sagt, gibt es einen guten Grund für OnScrollListener
, eine Klasse und nicht eine Schnittstelle zu sein? Weil ich denke, dass es eine Schnittstelle sein sollte.
sprechen über schlechte Design-Entscheidungen ... – marmor
Der Grund auf, um den Hörer in Ihrem metdod
und schaffen eine innere Listener-Klasse zu vermeiden erwähnt Das Commit ist "Ich habe es auch geändert, um eine abstrakte Klasse anstelle einer Schnittstelle zu sein, um zukünftige Änderungen einfacher zu machen." Aber man sollte keine Änderungen vornehmen, die auf der Zukunft basieren, wie in diesem Fall, diese Klasse wird sich nie ändern und es könnte sicherlich eine Schnittstelle für den Rest des Lebens sein. Es ist zwei Jahre her und es ist immer noch dasselbe. – LeonardoSibela