私は、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. Xamarin.Forms、Androidの場合、画面上部に黒いバーが表示されます
- 4. iOS autoLayoutビューが画面に表示されませんか?
- 5. ビューには実際の値の代わりにが表示されます
- 6. フラグメントが適切に画面に表示されない
- 7. Androidの場合、カスタムビューはギャラリー内の画面に表示されません
- 8. Install4jアンインストールアンインストールプログラムのすべての画面が表示されない
- 9. フレックスボックスセンターイメージが画面中央に表示されます
- 10. Androidデバイスのスプラッシュ画面が実際のデバイスに表示されない
- 11. Xcode 4.3のタブバーはすべての画面/スチールボードに表示されます
- 12. 画面の回転後にAndroidのフラグメントが重なって表示される
- 13. Xamarin.Forms(iOSプロジェクト):リストビューセパレータがすべての画面に表示されます
- 14. モバイルキーボードが表示されているときにtransform3dが画面に表示されない場合
- 15. アプリが実行中にiOSの黒い画面が表示される
- 16. 画面にネストされたすべてのビューのイベントandroid
- 17. 要素/ divが画面に表示されない場合のCSSの変更
- 18. ボトムバーが画面中央に表示されるのはなぜですか?
- 19. PHP [Img] BBCodeですが、画像が実画像の場合にのみ表示されますか?
- 20. 中断されたメッセージがブラウザ画面に表示され、ブラウザ画面を表示できません。
- 21. アクティビティの変更中に黒い画面が表示される
- 22. ビデオスプラッシュが画面の中央に表示されない - Androidスタジオ
- 23. ビューが実際に表示されるときのWKWebView通知
- 24. ライフサイクルDialogFragmentフラグメントからの表示
- 25. qt形式の全画面表示が時々ubuntuの上部ペインに表示され、時には表示されない場合があります
- 26. センターウェブサイトの背景が画面に表示されますか?
- 27. すべてのフィールドが実際にはない場合でもphpは 'Empty'を表示します
- 28. CSSの斜線が画面の中央に表示されます
- 29. ToolStripComboboxは、DropDownStyleがSimpleの場合に画面の左上隅に表示されます
- 30. ピクセル値(RGB)が実際に画面に表示される方法
これを行うでしょう。 Tks。 –
本当に閉じると、リスナーは、私がアクティビティビューを見ているので、onDestroyで中止するonPartおよび/またはonDetachのフラグメントを削除しても、リスナーはそのフラグメントに残っているように思えます。それをさらに見なければならない。ビューの情報は、フラグメント内のビューで使用できます。 :) –
@PeterBirdsリスナーは 'onGlobalLayout'メソッドの中でただ削除されています。そのため、レイアウトが完了した後に削除されます。素早いフラグメントの追加と削除を伴う競合状態に直面している場合、 'YourFragment.this.isAdded()'という条件を使用して 'onGlobalLayout()'の中にフラグメントがまだ追加されているかどうかを確認できます。 – Gero