/ / ListView con la data come posizione delle intestazioni di sezione varia suScroll: android, listview, sectionheader

ListView con data come posizione delle intestazioni di sezione varia su Scoll - Android, Listview, Sectionheader

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 № 1

Vedo 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);
}

}