私は、supportFragmentManagerを使用してさまざまなフラグメントを表示するActivityを持っています。その問題のフラグメントまたは親アクティビティーのビューを取得しようとしたときに、そのフラグメントのライフ・サイクルまたはonActivityCreated/onResume/onAttachedToWindowのonResumeの後のある時点で測定可能なように見えますアクティビティ。通常、約100〜200ms後に利用可能です。多分キャンバスの描画イベントのように、いつライフサイクルイベントが文書化されているか、文書化されていないか、これがいつ発生したかを知る方法がありますか?問題のフラグメントは、親アクティビティビューを測定する必要がありますが、すぐにonResumeで利用できるとは限りません。ハンドラを200ms待つような何らかのハックをしなければならないのは本当に嫌です。サポート中の場合フラグメントのライフサイクルはすべてのビューが実際に画面に表示されますか?
0
A
答えて
1
ViewTreeObserver.addOnGlobalLayoutListener()を使用できます。
@Override
public void onCreate(Bundle savedInstanceState) {
//...
someView.getViewTreeObserver().addOnGlobalLayoutListener(getOnLayoutListener(someView));
//...
}
private ViewTreeObserver.OnGlobalLayoutListener getOnLayoutListener(final View unHookView) {
return new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN)
unHookView.getViewTreeObserver().removeGlobalOnLayoutListener(this);
else
unHookView.getViewTreeObserver().removeOnGlobalLayoutListener(this);
//YOUR CODE HERE
}
};
}
関連する問題
- 1. フラグメントのアニメーション中に白い画面が表示される
- 2. 画面の中央にテキストが表示されます
- 3. iOS autoLayoutビューが画面に表示されませんか?
- 4. ビューには実際の値の代わりにが表示されます
- 5. フラグメントが適切に画面に表示されない
- 6. Androidの場合、カスタムビューはギャラリー内の画面に表示されません
- 7. Androidデバイスのスプラッシュ画面が実際のデバイスに表示されない
- 8. Xcode 4.3のタブバーはすべての画面/スチールボードに表示されます
- 9. 画面の回転後にAndroidのフラグメントが重なって表示される
- 10. モバイルキーボードが表示されているときにtransform3dが画面に表示されない場合
- 11. アプリが実行中にiOSの黒い画面が表示される
- 12. 要素/ divが画面に表示されない場合のCSSの変更
- 13. ボトムバーが画面中央に表示されるのはなぜですか?
- 14. 画面にネストされたすべてのビューのイベントandroid
- 15. 中断されたメッセージがブラウザ画面に表示され、ブラウザ画面を表示できません。
- 16. PHP [Img] BBCodeですが、画像が実画像の場合にのみ表示されますか?
- 17. アクティビティの変更中に黒い画面が表示される
- 18. ビューが実際に表示されるときのWKWebView通知
- 19. すべてのフィールドが実際にはない場合でもphpは 'Empty'を表示します
- 20. ピクセル値(RGB)が実際に画面に表示される方法
- 21. ToolStripComboboxは、DropDownStyleがSimpleの場合に画面の左上隅に表示されます
- 22. センターウェブサイトの背景が画面に表示されますか?
- 23. アプリを実行中にKivyアプリの画面が表示されない
- 24. プレビュー画像に白い画面が表示されますか?
- 25. すべてのiphoneとipadsの画面がポートレートモードで表示されます
- 26. 画面に表示されていないフラグメントのボタンへの変更
- 27. Svgパスがコンソールに表示されますが、画面に表示されないのはなぜですか?
- 28. RecyclerView内のレイアウトが画面上に表示される割合
- 29. Angular2でループ中にデータが画面に表示されない
- 30. コンボボックスのドロップダウンリストがウィンドウ画面の下に表示されます。
これを行うでしょう。 Tks。 –
本当に閉じると、リスナーは、私がアクティビティビューを見ているので、onDestroyで中止するonPartおよび/またはonDetachのフラグメントを削除しても、リスナーはそのフラグメントに残っているように思えます。それをさらに見なければならない。ビューの情報は、フラグメント内のビューで使用できます。 :) –
@PeterBirdsリスナーは 'onGlobalLayout'メソッドの中でただ削除されています。そのため、レイアウトが完了した後に削除されます。素早いフラグメントの追加と削除を伴う競合状態に直面している場合、 'YourFragment.this.isAdded()'という条件を使用して 'onGlobalLayout()'の中にフラグメントがまだ追加されているかどうかを確認できます。 – Gero