When overriding ArrayAdapter I know is correct using a pattern like this:
if(view != null){ ...create new view setting fields from data }else return vi
Yes, getView is in Adapter and is not dependant from ArrayAdapter nor CursorAdapter.
getView
Adapter
ArrayAdapter
CursorAdapter
recycling is always a good practice. Ensure that your code sets a colour in every situation.