0

リストの上に特定の要素を持つことは可能ですか?

背景: 新しいイベントが常に追加されるイベント アプリがあります。イベントは日付順に並んでいます。イベントが通過した場合、それはまだページの一番上にあります。しばらくすると、最初の要素はすべて終わったので、最初のページにはもう必要なデータは表示されません。発生するイベントにアクセスするには、ユーザーはページャー ボタンをクリックする必要があります。このイベントを一番上に表示したいのですが、ユーザーが以前のイベントを見たい場合は、ページャーの戻るボタンをクリックする必要があります。

私が試したこと:

cellTable.setVisibleRange(overElements, (overElements + totalEementCount));

これにより、ページャーのロジック全体が混乱し、ユーザーはページャーからページに切り替えることができなくなります。

SingleSelectionModel<JSEvents> selectionModel = new SingleSelectionModel<JSEvents>();
...
selectionModel.setSelected(nextEvent, true);

これにより、適切な要素が選択され、ページャーがそこに移動しますが、他の要素はまだ表示されているため、いくつかの「オーバー」イベントがあり、最悪の場合、テーブルに「来る」イベントが 1 つしかありません。また、ユーザーは次のイベントを確認する必要があり、ページの上部に表示されないため、使いやすさが悪いです...

4

2 に答える 2

1

を使用している場合はListDataProvider、新しいイベントをリストの先頭に追加できます。そのデータプロバイダーに依存するものはすべて通知され、再描画する必要があります。

別の種類のデータ プロバイダーを使用している場合は、自分自身に電話する必要があるかもしれませんが、それは面倒CellTable.redrawだと思います。AbstractDataProvider

最初の調査ステップとして、新しいイベントがログに記録された後に電話をかけてみて、それでcellTable.redraw()問題が解決するかどうかを確認してください。

于 2012-06-12T15:59:42.703 に答える
0

解決策が見つかりました: celltable には method がありsetVisibleRangeます。このメソッドは、ページャーが関与する場合の例で使用されます。

            int start = display.getVisibleRange().getStart();
            int end = start + display.getVisibleRange().getLength();
            end = end >= data.size() ? data.size() : end;
            List<JSEvents> sub = data.subList(start, end);
            updateRowData(start, sub);

updateRowData は、表示されるデータとこのデータが開始する位置をセル テーブルに通知します。

ページの上に特定の要素を配置したい場合は、同じ関数を使用できます。これは私がそれを使用する方法です:

        int end = start + PAGESIZE;
        end = (end >= data.size()) ? data.size() : end;
        List<JSEvents> sub = data.subList(start, end);

        dataProvider.updateRowData(start, sub);
        cellTable.setVisibleRange(start, sub.size());
于 2012-06-13T07:45:44.937 に答える