2017-01-30 12 views
2

アプリケーションでGWTの(2.5)SimplePagerクラスを使用して、プリロードされたデータを表示しています(事前に正確な行数が分かっています)。GWT SimplePagerの問題

問題は最後のページです。たとえば、最初の可視範囲10の42要素があるとします。 最初のページは1-10、2番目の11-20、3番目の21-30、4番目の31-40です。 問題は5ページ目が41-42ではないことです(同じデータ上でを正確にと「スクロールして」表示できるようにしたいからです)。

私は、成功していないSimplePager/AbstractPagerメソッドをオーバーライドしてさまざまな試みを試みました。 たとえば、setPageStartをオーバーライドする場合は、com.google.gwt.user.cellview.client.AbstractPager.setPageStart(int)と同じ操作を行いますが、次のようにコメントアウトします(私はそれが原因コードだと思います)。

if (isRangeLimited && display.isRowCountExact()) { 
    index = Math.min(index, display.getRowCount() - pageSize); 
} 

最後のページは良いですが(41-42)、ページサイズが永久に消えてしまい、最後のページから前のページに行くと40-41(予想:31-40)になります。これは、ページ・サイズがページャ・インスタンスに提供される定数ではなく、最後に使用されたRangeオブジェクト(setPageStartメソッドの "int pageSize = range.getLength();")で計算されるためです。

私のニーズに合わせてページングの動作を変更する手掛かりはありますか?

ありがとうございます!

答えて

0

私は最終的には十分に簡単な解決策を得ました。 私はSimplePagerオブジェクトにページサイズ(表示可能な要素の総数にかかわらず表示できる要素の最大数)を提供しました。次に、Rangeオブジェクトに対してgetLength()の代わりに指定されたページサイズを使用するためにgetPage()、hasNextPage()、hasNextPages(int)、hasPreviousPages(int)、nextPage()、previousPage()、setPageStart(int)をオーバーライドしました。

私はGWTのShowcaseプロジェクトを使用して(devモードで実行しました)これをより簡単にテストします(まだ手作業で行っています)。

欠点は、オーバーライドされたメソッド(AbstractPager - SimplePagerのコードをスーパークラスのメソッドを呼び出すこと以外は何もしない)を私のPagerクラスにコピーしなければならないことです。