Come utilizzare due veditori in un singolo adattatore
-
23-12-2019 - |
Domanda
Sto affrontando un problema durante l'utilizzo della sezione in un elenco.Ho bisogno di usare il versamento per rendere Listview Scroll Smooth ma non so come implementare due veduti come due viste separate, una sezione è la sezione e secondo è semplice ingresso. Questo è il codice cosa ho provato e l'errore che ho ottenuto.Per favore dimmi dove sto sbagliando e come posso correggerlo:
Codice
@
Override
public View getView(int position, View convertView, ViewGroup parent) {
final GroupAccountdto i = items.get(position);
if (i != null) {
if (i.isSection()) {
if (convertView == null) {
convertView = vi.inflate(R.layout.list_group_section, null);
ViewHolderGroup group_holder = new ViewHolderGroup();
group_holder.group_name = (TextView) convertView.findViewById(R.id.list_section_group_name);
convertView.setTag(group_holder);
}
ViewHolderGroup group_holder = (ViewHolderGroup) convertView.getTag();
GiddhGroups si = (GiddhGroups) i;
group_holder.group_name.setText(si.getGroupname());
} else {
if (convertView == null) {
convertView = vi.inflate(R.layout.list_item_account, null);
ViewHolderAccount account_holder = new ViewHolderAccount();
account_holder.account_name = (TextView) convertView.findViewById(R.id.list_item_account_name);
account_holder.account_bal = (TextView) convertView.findViewById(R.id.list_item_account_balance);
}
ViewHolderAccount account_holder = (ViewHolderAccount) convertView.getTag();
GiddhAccounts ei = (GiddhAccounts) i;
if (account_holder.account_name != null)
account_holder.account_name.setText(ei.getAccountName());
if (account_holder.account_bal != null)
account_holder.account_bal.setText(ei.getBalance());
}
}
return convertView;
}
static class ViewHolderGroup {
TextView group_name;
}
static class ViewHolderAccount {
public TextView account_name;
public TextView account_bal;
}
.
Errore
02-27 12:49:28.461: E/AndroidRuntime(20200): java.lang.ClassCastException: adapters.GroupAccountAdapter$ViewHolderGroup cannot be cast to adapters.GroupAccountAdapter$ViewHolderAccount
02-27 12:49:28.461: E/AndroidRuntime(20200): at adapters.GroupAccountAdapter.getView(GroupAccountAdapter.java:53)
02-27 12:49:28.461: E/AndroidRuntime(20200): at android.widget.AbsListView.obtainView(AbsListView.java:2334)
02-27 12:49:28.461: E/AndroidRuntime(20200): at android.widget.ListView.measureHeightOfChildren(ListView.java:1409)
02-27 12:49:28.461: E/AndroidRuntime(20200): at android.widget.ListView.onMeasure(ListView.java:1273)
. Soluzione
È necessario scavalcare getItemViewType()
nel ListAdapter
, restituendo un numero distinto per ciascun tipo di riga.Nel tuo caso, è possibile tornare 0
per sezioni e 1
per righe regolari.Quindi, getView()
verrà chiamato con il tipo di generazione di View
corretto per il riciclaggio.
@Override
public int getItemViewType(int position) {
if (getItem(position).isSection()) {
return(0);
}
return(1);
}
. Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow