How to use ArrayAdapter

后端 未结 5 1894
夕颜
夕颜 2020-11-22 14:23
ArrayList myList = new ArrayList();

ListView listView = (ListView) findViewById(R.id.list);

ArrayAdapter adapter = new         


        
5条回答
  •  误落风尘
    2020-11-22 14:27

    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 extends ArrayAdapter {
    
      // Vars
      private LayoutInflater mInflater;
    
      public GenericArrayAdapter(Context context, ArrayList 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 {
    
      public SizeArrayAdapter(Context context, ArrayList objects) {
        super(context, objects);
      }
    
      @Override public void drawText(TextView textView, Size object) {
        textView.setText(object.getName());
      }
    
    }
    

    and finally, how to initialize it:

    ArrayList 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

提交回复
热议问题