The following is the first few sections of a chapter from The Busy Coder's Guide to Android Development, plus headings for the remaining major sections, to give you an idea about the content of the chapter.
Visually representing collections of items is an important aspect of
many mobile apps. The classic Android implementation of this was
the AdapterView family of widgets: ListView, GridView, Spinner, and
so on. However, they had their limitations, particularly with respect to
advanced capabilities like animating changes in the list contents.
In 2014, Google released RecyclerView, via the Android Support package.
Developers can add the recyclerview-v7 artifact to their projects and use
RecyclerView as a replacement for most of the AdapterView family.
RecyclerView was written from the ground up to be a more flexible
container, with lots of hooks and delegation to allow behaviors to be
plugged in.
This had two major impacts:
RecyclerView is indeed much more powerful than its AdapterView
counterpartsRecyclerView, out of the box, is nearly useless, and wiring together
enough stuff to even replicate basic ListView/GridView functionality
takes quite a bit of codeIn this chapter, we will review the basic use of RecyclerView, as an alternative
to ListView. A later chapter gets into more complex scenarios,
such as replacing GridView with RecyclerView.
AdapterView, and particularly its ListView and GridView
subclasses, serve important roles in Android application development.
And, for basic scenarios, they work reasonably well.
However, there are issues.
Perhaps the biggest tactical issue is that updating an AdapterView tends to be an
all-or-nothing affair. If there is a change to the model data — new
rows added, existing rows removed, or data changes that might affect
the AdapterView presentation — the only well-supported solution is
to call notifyDataSetChanged() and have the AdapterView rebuild
itself. This is slow and can have impacts on things like choice states.
And, if you wanted to get really elaborate about your changes, and
use animated effects to show where rows got added or removed, that was
halfway to impossible.
Strategically, AdapterView, AbsListView (the immediate parent of
ListView and GridView), and ListView are large piles of code
that resemble pasta to
many outsiders. There are so many responsibilities piled into these
classes that maintainability was a challenge for Google and extensibility
was a dream more than a reality.
The preview of this section is [REDACTED].
The preview of this section was eaten by a grue.
The preview of this section is [REDACTED].
The preview of this section is out seeking fame and fortune as the Dread Pirate Roberts.
The preview of this section is in the process of being translated from its native Klingon.