私はGWTでメッセージングアプリケーションを作成していますが、解決策を見つけるのはかなり難しい問題です。私はGWT CellListを使って作業しています。私のセルリストには、ユーザーが最近連絡を取った最近の連絡先がすべて表示されています。しかし、ユーザーがそのリストに載っていない人にメッセージを書いていると言うことができます。私は一時的にrecentContactsリストにそれらを追加し、それが示すようにCellListを更新します..GWT CellListエラー:onSelectionChange、範囲外のインデックス
しかし、彼らはメッセージを送信しないように終わったとしましょう。私はそれを検出し、リストから削除する必要があります。そのための明白な場所は、選択変更ハンドラです。実際には、セレクション変更ハンドラ内で、セルリストを表すデータオブジェクトのリストを変更できますが、実際にセルリストにプッシュすると、インデックス外のエラーが発生します。
これが問題であることを確認しました。だから基本的に私は立ち往生している。これを確認する明白な場所は、別の連絡先を表示することです。私はメッセージがこの他の連絡先に送信されたかどうかを確認し、そうでなければ連絡先を取り除くことができますが、どうにかしてselectionChangeHandlerでそれをしないといけません。誰にも解決策やアイデアはありますか?私はマウスアップイベントを試みたが、それは選択イベントが起こる前に起こった。
、私は実装ソリューションは、タイマーを使用するだけでした
selectionModel.addSelectionChangeHandler(new SelectionChangeEvent.Handler() {
public void onSelectionChange(SelectionChangeEvent event) {
ContactDO selectedContact = selectionModel.getSelectedObject();
//Check if we want to remove a contact from the list
if (we want to remove a contact in the list that is not the currently selected contact.) {
//remove contact
recentContacts.remove(contactThatisNotSelected);
//Refresh the contact cell list
contactCellList.setVisibleRange(0, recentContacts.size());
contactCellList.setRowCount(recentContacts.size(), true);
contactCellList.setRowData(0, recentContacts);
}
}
});
インデックスはいつアウトバウンドしますか? GWTコードの中にバグのように思えます。あなたはその問題トラッカーをチェックしましたか? –
いいえ、しかし、私はたくさんの検索をしました。何か問題があれば、通常、問題追跡ツールの下に何かが表示されます。選択イベントの前に、コードが記録している、またはリストのサイズに注意を払っているように見えます。それは、それが後で同じになることを期待しています。私は100ms後にロジックを行うタイマーを使ってそれを修正しました。 – spierce7