私はたくさん検索しましたが、BlackberryのExpandable listviewのリンクが1つも見つかりませんでした.AndroidでExpandable listを作成する方法を知っています.Blackberry Expandable listviewについて誰かが考えているなら、助けてください.
2 に答える
BB で List を作成する標準的な方法は、ListField クラスを使用することです。このクラスは非常に効率的ですが、いくつかの欠点があります
- すべての行は同じ高さでなければなりません
- すべての行がディスプレイ上で連続している必要があります
これにより、このクラスを使用して Android ExpandingListView を複製することが困難になります。
BlackBerry デバイスでこの外観を再現するには、一連の VerticalFieldManager (VFM) をお勧めします。リスト全体に 1 つを使用し、展開可能な項目ごとにこれに追加します。アイテムが展開されている場合は、関連する VFM に子リスト エントリを追加します。展開されていない場合は、子エントリを削除します。
このアプローチは、ある程度までは問題なく機能します。表示されているフィールドの数が多い場合、フィールドを追加および削除すると、BB デバイスの速度が大幅に低下する可能性があります。したがって、たとえばリストに 20 個の項目があれば、問題ありません。2000 を使用している場合、リストを拡大および縮小する (子リスト項目を追加および削除する) と、デバイスの速度が大幅に低下します。
リスト アイテム (親と子) をできるだけ効率的にすることで、このパフォーマンスを向上させることができます。ここにある ListStyleButtonField に使用されているコードを確認することをお勧めします。
アップデート
ListField が直接機能しない理由と、可能な回避策を明確にしたかっただけです。
ListField の問題は、各行に特定の高さがあることです。子要素を表示するには、親アイテムの高さを拡張して子要素を含める必要がありますが、これはできません。したがって、呼び出されたバック ペイント メソッド (ListField で drawListRow(..) と呼ばれる) を更新して、この外観を実現することはできません。もう 1 つの問題は、ListField の 1 つのリスト項目が単一のエンティティとしてフォーカスされていることです。ここでは、子を個別に選択する必要があると想定しています。
代わりに、展開するときに追加の行を追加して、描画するリストに子アイテムを効果的に挿入できます。drawListRow(..) メソッドがこれらを子として描画することを認識できるように、フラグを使用してこれらの行を追加する必要があります。削除時に逆。子アイテムは他のすべてのものと同じ高さでなければならないことに注意してください。
両方を試してみた結果、VFM アプローチの方が管理しやすいことがわかりました。リストがパフォーマンスに影響を与えるのに十分な大きさである ListField アプローチのみを検討します。そして、それがそれほど大きい場合、BB でその数のエントリをスクロールするのは誰でしょうか? その数に達している場合は、ページング メカニズムの方がユーザーにとって使いやすいと思われます。
BlackBerry Java SDK を意味する場合は、TreeFieldクラスを見てください。
アップデート:
この場合、ListFieldが最適な選択肢になります。必要に応じてListFieldCallbackを実装し、それを ListField インスタンスにアタッチします。ユーザーが「展開可能な」リスト項目をクリックすると、ListFieldCallback でこのイベントを処理し、リスト インスタンスを再描画します。ListFieldクラスの操作に関するチュートリアルを次に示します。