ArrayAdapter: This is just a way to provide data in a ListView. It is also a BaseAdapter that is supported by an array of objects.
CustomAdapter: If your ListView is a regular and simple ListView (in which you have one TextView for each item in the list), then using an ArrayAdapter will be apt. But it is recommended that you create your own CustomAdapter that extends the ArrayAdapter, which you can use to provide data in the ListView. This way you can easily expand your ListView to include more than one TextView or even an ImageView (to display images).
CursorAdapter: The cursor adapter is used when you have data in the cursor (usually when you retrieve data from a database. The cursor must contain a column named "_id" or this class will not work.
source share