I think this is the best approach. Using generic ArrayAdapter class and extends your own Object adapter is as simple as follows:
public abstract class GenericArrayAdapter<T> extends ArrayAdapter<T> {
  // Vars
  private LayoutInflater mInflater;
  public GenericArrayAdapter(Context context, ArrayList<T> objects) {
    super(context, 0, objects);
    init(context);
  }
  // Headers
  public abstract void drawText(TextView textView, T object);
  private void init(Context context) {
    this.mInflater = LayoutInflater.from(context);
  }
  @Override public View getView(int position, View convertView, ViewGroup parent) {
    final ViewHolder vh;
    if (convertView == null) {
      convertView = mInflater.inflate(android.R.layout.simple_list_item_1, parent, false);
      vh = new ViewHolder(convertView);
      convertView.setTag(vh);
    } else {
      vh = (ViewHolder) convertView.getTag();
    }
    drawText(vh.textView, getItem(position));
    return convertView;
  }
  static class ViewHolder {
    TextView textView;
    private ViewHolder(View rootView) {
      textView = (TextView) rootView.findViewById(android.R.id.text1);
    }
  }
}
and here your adapter (example):
public class SizeArrayAdapter extends GenericArrayAdapter<Size> {
  public SizeArrayAdapter(Context context, ArrayList<Size> objects) {
    super(context, objects);
  }
  @Override public void drawText(TextView textView, Size object) {
    textView.setText(object.getName());
  }
}
and finally, how to initialize it:
ArrayList<Size> sizes = getArguments().getParcelableArrayList(Constants.ARG_PRODUCT_SIZES);
SizeArrayAdapter sizeArrayAdapter = new SizeArrayAdapter(getActivity(), sizes);
listView.setAdapter(sizeArrayAdapter);
I've created a Gist with TextView layout gravity customizable ArrayAdapter:
https://gist.github.com/m3n0R/8822803