ドロップダウンメニューからのオプションのユーザー選択に依存する、選択された NavigatorContent の可視性で制御される ViewStack を使用しています。
ViewStack の各ビューには、2 ~ 3 個の DataGrid、チャートなどを含む独自の個別の UI 要素があります。これは、各ビューがコースにバインドされ、そのコースの学生の成績を表示する単純な学校のアプリケーションと考えてください (学生をグリッドに一覧表示しながら)。
ただし、データの表示に問題がある場合があります。レンダリングが完了する前に、データを入力する準備ができています。これは、データを入力する必要がある UI 要素がまだ作成されていないため、null 例外をスローします。
このために、「creationPolicy」を「all」に設定しました。このプロパティを設定すると、すべてが正常に機能します。しかし、確かに多くのパフォーマンスの問題があります:-
- ユーザーが最初に表示されたビュー以外にアクセスしたことがなくても、他のビューはレンダリングされます (UI 要素が初期化および作成されます)。
- 起動時のパフォーマンス ヒット - 起動時間は長く、ビューの数に応じて長くなります (現在、作成ポリシーがすべてに設定された 9 つのビューがあります)。デフォルトで最初のビューのみが表示され、creationPolicyが default/auto に設定されている場合、アプリケーションの読み込みは高速でした
- アプリケーションの起動中にUIがハングする/応答しなくなる(すべて同じスレッドで発生するため)
これに対する可能な解決策は何ですか。
これらは私が念頭に置いていた解決策であり、1つか2つの理由で機能しませんでした:-
- ドロップダウン コントローラーを介してビューが初めて選択されたとき (つまり、レンダリングと UI の作成がまだ行われていないとき)、プリローダーを表示することができます。これを試してみましたが、UI がまだハングするか、応答しなくなります。
- CallLater は役に立ちますか? 必要がない場合でも、すべてのビューを作成しているので、そうではありません。
そのため、ビューが作成/インスタンス化されたときにビューを表示する (そして何らかの進行状況やローダーを表示する) エレガントな方法が必要です。
アップデート
UI 要素のレンダリングが完了する前に処理 (UI コンポーネントに入力されるデータを返す、グリッドなど) が完了すると、一種の競合状態がある場合に Null エラーが発生します。最初は、作成ポリシーをデフォルトに設定していたので、使用してビューを選択すると、その時点で作成されました。ビューの要素が作成される前に入力されるデータが返された場合、null ポインターがありました (参照するために使用する UI 要素がまだ作成されていたため、そのインスタンスでは null でした)。現在、すべてのビューに対して UI が作成されるように、creationPolicy を all に設定する必要があり、ドロップダウンからそのビューを選択するとデータ処理が開始されます。
私がやりたいのは、オンデマンドで UI を作成する方法を用意することです (使用されていない場合でも、UI のすべてではありません)。