Sto cercando di caricare i callLog personalizzati in un file listView
in base alla data come intestazione di sezione ListAdapter
confronto ogni data con la data precedente e set SectionHeaderLayout
Visibile / invisibile. Quando il ListView
è stato caricato l'intestazione della sezione viene visualizzata correttamente ma quando scorro le intestazioni della sezione sono impostate Visibile su errato ListItems
.
Per favore aiutami a trovare una soluzione.
Ecco come sto cercando di impostare SectionHeader
tramite la adapter
.
if (position == 0) {
checkDate = mDateStr;
holder.sectionHeaderDate.setVisibility(View.VISIBLE);
holder.sectionHeaderText.setText(mDateStr);
}
} else if (checkDate == null || !checkDate.equals(mDateStr)) {
checkDate = mDateStr;
holder.sectionHeaderDate.setVisibility(View.VISIBLE);
holder.sectionHeaderText.setText(mDateStr);
} else {
holder.sectionHeaderDate.setVisibility(View.GONE);
}
Grazie in anticipo
risposte:
0 per risposta № 1Vedo che questa è una vecchia domanda, probabilmente hai risolto il tuo problema, ma risponderò per altri che avranno lo stesso problema.
Se vuoi mostrare l'intestazione in base alla data precedentenon puoi farlo ricordando l'ultimo elemento che è stato passato alla funzione getView. Il motivo è lo scorrimento, cioè direzione diversa quando si sale e si scende. Ad esempio, se hai articoli 1, 2, 3, 4, 5
quando scendi e l'elemento corrente è 3, il precedente era 2 e tutto funzionerà. Ma se stai salendo, il tuo articolo precedente per 3 era in realtà 4, ed è lì che si verifica il tuo problema.
quindi invece di tenere l'oggetto, dovresti usare le posizioni.
questo sarebbe lo schizzo della soluzione che puoi chiamare all'interno della tua funzione getView:
private void showHeader(ViewHolder holder, Call item, int position) {
boolean shouldShowHeader = false;
if (position == 0
|| !DateHelper.isSameDay(item.getDateTime(),
items.get(position - 1).getDateTime()))
shouldShowHeader = true;
if (shouldShowHeader) {
holder.header.setVisibility(View.VISIBLE);
holder.date.setText(DateHelper.getSimpleDate(item.getDateTime()));
} else {
holder.header.setVisibility(View.GONE);
}
}