0

listViewセクション ヘッダーとして日付に基づいてカスタム callLogs を読み込もうとしています。ListAdapter各日付を前の日付と比較し、表示/非表示を設定しSectionHeaderLayoutます。ロードされている場合ListView、セクション ヘッダーは正しく表示されますが、スクロールすると、セクション ヘッダーが Visible に wrong に設定されますListItems

解決策を見つけるのを手伝ってください。

SectionHeaderこれは、を通じて設定しようとしている方法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);
        }

前もって感謝します

4

1 に答える 1

0

これは古い質問だと思います。おそらく問題は解決しましたが、同じ問題を抱えている他の人にも答えます。

前の日付に基づいてヘッダーを表示したい場合は、getView 関数に渡された最後の項目を記憶することによってそれを行うことはできません。その理由はスクロール、つまり上下で方向が違うからです。たとえば、項目 1、2、3、4、5 がある場合

あなたがダウンしているとき、現在のアイテムは 3 で、前のアイテムは 2 で、すべてが機能します。しかし、上に行く場合、3 の前の項目は実際には 4 であり、ここで問題が発生します。

そのため、アイテムを保持する代わりに、位置を使用する必要があります。

これは、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);
    }

}
于 2014-11-26T03:49:58.173 に答える