0

OS 5.0 と letter.my で Listfield を使用しています。すべてのデータは webservice から取得され、listfield に表示されます。最初は解析時にすべてが正常に機能し、listfield に正常に表示されます。最初にレコードが 1 つしかない場合行に表示すると正常に動作しますが、クリックしてNextButtonfieldリストフィールドを更新すると、複数のレコードが取得され、リストフィールドに1つのレコードが表示されます..

私は多くのデバッグを行っており、いくつかの問題が発生しています.. drawListRow メソッドのインデックスがsetSize(listItem.size());. listItemvector であり、 record に依存して正常に更新されます。

インデックスを更新する方法は、ベクトルのサイズに依存しますか? または更新時にすべての行を削除する方法は?

4

2 に答える 2

2

潜在的に変更される可能性のある内のデータを操作する際に、頭痛の種を大幅に軽減するのに役立ついくつかのヒントListField:

  • 共有オブジェクト (Vectorこの場合は your ) を使用して、 によって更新および使用されるデータを格納する場合は、ListFieldその を更新しているコードのチャンクを同期するようにしてくださいVector。そうしないと、更新中に がListFieldどれだけ大きいかわからないため、IndexOutOfBounds Exception が発生する可能性があります。Vector
  • 表示しているものが単純な場合、より良い解決策は、行を表示するために最低限必要な何らかの種類の Bean を用意することです。ベクターを通過するある種の同期setItems()呼び出しを公開ListFieldし、名前(または表示しているものは何でも)を保存し、サイズを更新して、ベクターに何をしても、ListField常に良いデータがあります。

あなたの場合、setSize(listItem.size());リスト内のアイテムの数を更新するために を呼び出す必要があるという点で正しいです。私の 2 番目の提案を使用する場合、すべてを削除するためにできることは、呼び出すだけlist.setItems(new Vector());で、サイズが 0 に設定され、保存されているアイテムも消去されます。または、単純に呼び出すlist.setSize(0);と、リストが空であることがエミュレートされます。これは、描画するものがないと見なされるため、代わりに「空の文字列」が表示されます。

drawListRow()また、メソッドに問題があり、複数の行が表示されているように見えない可能性もあります。そこからコードを投稿していただければ、それを調べて、潜在的な問題があるかどうかをお知らせします。

于 2011-11-01T12:29:51.803 に答える
0

このブログ記事から解決策を見つけました:

私が見つけた実用的な解決策は、ListFieldコントロールをマネージャーから削除し、nullに設定して、再初期化することです。

最善の解決策ではありませんが、現在それが私のために機能している唯一の方法です:

Manager.delete(ListField);
ListField = null;
ListField = FillListWithItems();

Manager.add(ListField);
于 2011-11-02T04:21:21.077 に答える