Ich benutze RecyclerView.Adapter, aber ich bin etwas verwirrt in Bezug auf die Arbeit seiner Methode onCreateViewHolder
.Android RecyclerView.Adapter onCreateViewHolder() funktioniert
@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;
}
}
So einhüllen habe ich 10 Stück in meiner Liste so für jedes Element diese Methode aufgerufen wird, und jedes Mal, wenn ein neues ViewHolder
wird natürlich erstellt werden, es wird einmal für jede Ansicht, aber jetzt ist meine Frage, wenn Wir benutzten ListView
und BaseAdapter
mit ihnen wir speichern ViewHolder
in Tag und verwenden Sie das. Wir erstellen kein ViewHolder
für jeden Artikel.
@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;
}
So erstellen wir keine zusätzlichen Viewholders-Objekte. Bitte helfen Sie mir, die Vor- und Nachteile zu verstehen.
Dank
So bedeutet es eine viewholder für jedes Element erzeugen werden und Verwenden Sie dann diesen Halter jedes Mal für diese Zelle der Liste. Recht? –
Danke Gil, ich habe noch eine Frage in RecyclerView.Adapter, aber dafür werde ich eine separate Frage zum Stapelüberlauf stellen. –
Ich habe ein Dokument durchgelesen, das für die abstrakte Methode onCreateViewHolder erwähnt wird. Der neue ViewHolder wird verwendet, um Elemente des Adapters unter Verwendung von {@link #onBindViewHolder (ViewHolder, int)} anzuzeigen. Da es zur Anzeige verschiedener Elemente im Datensatz verwendet wird, empfiehlt es sich, Verweise auf Unteransichten der Ansicht zu cachen, um unnötige Aufrufe von {@link View # findViewById (int)} zu vermeiden. Wie können wir Referenzen auf Unteransichten im Cache speichern? –