Android RecyclerView.Adapter onCreateViewHolder () работает

Я использую RecyclerView.Adapter, но я немного запутался в отношении работы его метода onCreateViewHolder .

  @Override public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup viewGroup, int viewType) { if(viewType==TYPE_ITEM) { View mView = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.inflate_common_item, viewGroup, false); ViewHolder vh = new ViewHolder(mView); return vh; } else { View mView = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.inflate_uncommon_item, viewGroup, false); ViewHolderFooter vh = new ViewHolderFooter(mView); return vh; } } 

Таким образом, у меня есть 10 элементов в моем списке, поэтому для каждого элемента этот метод будет вызван, и каждый раз, ViewHolder будет создан новый ViewHolder , он будет один раз для каждого представления, но теперь мой вопрос заключается в том, когда мы использовали ListView и BaseAdapter с Они мы храним ViewHolder в теге и используем это. Мы не создаем ViewHolder для каждого элемента.

  @Override public View getView(int position, View convertView, ViewGroup parent) { MyViewHolder mViewHolder; if(convertView == null) { convertView = inflater.inflate(R.layout.layout_list_item, null); mViewHolder = new MyViewHolder(); convertView.setTag(mViewHolder); } else { mViewHolder = (MyViewHolder) convertView.getTag(); } mViewHolder.tvTitle = detail(convertView, R.id.tvTitle, myList.get(position).getTitle()); mViewHolder.tvDesc = detail(convertView, R.id.tvDesc, myList.get(position).getDescription()); mViewHolder.ivIcon = detail(convertView, R.id.ivIcon, myList.get(position).getImgResId()); return convertView; } 

Так что мы не создаем дополнительный объект зрителей. Пожалуйста, помогите мне понять плюсы и минусы.

благодаря

Solutions Collecting From Web of "Android RecyclerView.Adapter onCreateViewHolder () работает"

onCreateViewHolder создает только новый держатель вида, если нет существующих держателей вида, которые RecyclerView может повторно использовать. Так, например, если ваш RecyclerView может отображать по 5 элементов за раз, он будет создавать 5-6 ViewHolders , а затем автоматически повторно использовать их при каждом вызове onBindViewHolder .

Это похоже на то, что делает ваш код в ListView (проверка, если convertView имеет значение null , а если нет, захват существующего ViewHolder из тега), за исключением, с RecyclerView , все это делается автоматически.

Я полагаю, что это один из плюсов с использованием RecyclerView – вам не нужно так беспокоиться о повторном использовании ViewHolders как в ListView . Кон, RecyclerView очень настраиваемый, но имеет очень мало встроенных функций – в отличие от ListView который не очень настраиваемый, но имеет множество встроенных функций.