Xamarin.Android ListView and the Activity Lifecycle
Activities go through certain states as your application runs, such as
starting up, running, being paused and being stopped. For more
information, and specific guidelines on handling state transitions, see the
Activity Lifecycle Tutorial.
It is important to understand the activity lifecycle and place your
ListView
code in the correct locations.
All of the examples in this document perform 'setup tasks' in the
Activity's OnCreate
method and (when required) perform
'teardown' in OnDestroy
. The examples generally use small data
sets that do not change, so re-loading the data more frequently is
unnecessary.
However, if your data is frequently changing or uses a lot of memory it
might be appropriate to use different lifecycle methods to populate and
refresh your ListView
. For example, if the underlying data is
constantly changing (or may be affected by updates on other activities)
then creating the adapter in OnStart
or OnResume
will ensure the
latest data is displayed each time the Activity is shown.
If the Adapter uses resources like memory, or a managed cursor,
remember to release those resources in the complementary method to
where they were instantiated (eg. objects created in OnStart
can be
disposed of in OnStop
).
Configuration Changes
It's important to remember that configuration changes – especially
screen rotation and keyboard visibility – can cause the current
activity to be destroyed and re-created (unless you specify otherwise using
the ConfigurationChanges
attribute). This means that under
normal conditions, rotating a device will cause a ListView
and
Adapter
to be re-created and (unless you have written code in
OnPause
and OnResume
) the scroll position and row selection states
will be lost.
The following attribute would prevent an activity from being destroyed and recreated as a result of configuration changes:
[Activity(ConfigurationChanges="keyboardHidden|orientation")]
The Activity should then override OnConfigurationChanged
to respond
to those changes appropriately. For more details on how to handle
configuration changes see the documentation.