0

SimpleAdapter作成時に適切に機能するアイテムの with date グループ化を拡張しました。リストアイテムにはグループ化ビューが含まれており、アイテムが現在の日付グループに属している場合、アダプターはこのビューを非表示にしています:

TextView Title (2012-10-08) - visible
TextView Name  (Foo)        - visible

TextView Title (2012-10-08) - hidden
TextView Name  (Bar)        - visible

TextView Title (2012-10-07) - visible
TextView Name  (Baz)        - visible

TextView Title (2012-10-07) - hidden
TextView Name  (Etc)        - visible

ここで、完全に入力されたリストの 2 番目の項目の下にスクロールすると、再び上にスクロールすると非表示のビューが表示されます。なぜこれが起こっているのですか、どうすればそれを防ぐことができますか?

後でアダプターを変更しないので、ビューステートを変更するonCreate理由についての手がかりがありません。ListViewAdapter

日付アダプター:

public class DateAdapter extends SimpleAdapter
{
    protected   ArrayList<HashMap<String, String>>  items;
    private     String                  prevDate = "";
    private     SimpleDateFormat            dateFormat = new SimpleDateFormat("EEEE, dd/MM yyyy", Locale.getDefault());

    public DateAdapter (Context context, ArrayList<HashMap<String, String>> items, int resource, String[] from, int[] to)
    {
        super(context, items, resource, from, to);
        this.items = items;
    }

    @Override
    public View getView (int position, View convertView, ViewGroup parent)
    {
        View view = super.getView(position, convertView, parent);

        try
        {
            HashMap<String, String> item = this.items.get(position);
            Long itemTime = Long.parseLong(item.get("timedate")) * 1000;

            Calendar calendar = Calendar.getInstance();
            calendar.setTimeInMillis(itemTime);
            String dateString = dateFormat.format(calendar.getTime());

            TextView section = (TextView) view.findViewById(R.id.sectionTitle);

            if (!dateString.equals(this.prevDate))
            {
                this.prevDate = dateString;
                section.setText(dateFormat.format(calendar.getTime()));
                section.setVisibility(View.VISIBLE);
            }
        }
        catch (Exception e) { Debug.e(e); }

        return view;
    }
}
4

1 に答える 1

1

View view = super.getView(position, convertView, parent);

この行は、指定された convertView が null の場合にのみ、新しく作成されたビューを返します。convertView が null でない場合は、同じビューが返されます。そのため、同じ convertView インスタンスを返すと、可視性 VISIBLE を持つビューが可視のままになる可能性があります。だから、あなたがしなければならないことは、この条件のelseを満たすことです

    if (!dateString.equals(this.prevDate)){} 

ここで、ビューの可視性を INVISIBLE に設定します。教えて 役に立ちましたか?

于 2012-10-08T11:22:58.353 に答える