フラグメントがユーザーに表示されるたびに、Webサービスを呼び出し、データをフェッチして画面に表示するコードを実行したいと思います。Webサービス部分などが機能するようになりましたが、どのような場合にコードを追加する必要があるのかわかりません。
- onStart
- onResume
- onAttach
しかし、私のコードは毎回起動するわけではありません。
基本クラスとしてSherlockFragmentを使用してAndroidv4complibを使用しています。
フラグメントがユーザーに表示されるたびに、Webサービスを呼び出し、データをフェッチして画面に表示するコードを実行したいと思います。Webサービス部分などが機能するようになりましたが、どのような場合にコードを追加する必要があるのかわかりません。
しかし、私のコードは毎回起動するわけではありません。
基本クラスとしてSherlockFragmentを使用してAndroidv4complibを使用しています。
使用できます
@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
super.setUserVisibleHint(isVisibleToUser);
if (isVisibleToUser) { }
else { }
}
これを見てください
これは非常に古いかもしれませんが、setUserVisibleHint()が私のユースケースの多くで機能しないことがわかりました。代わりに、ViewTreeObserverを使用してハックに頼らなければなりませんでした。
基本的に、フラグメントが初期化された後、フラグメント内のビューを取得し、次のようにします。
myViewInFragment.getViewTreeObserver().addOnGlobalLayoutListener(
new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
myMethodWhenFragmentFirstBecomesVisible();
myViewInFragment.getViewTreeObserver().removeOnGlobalLayoutListener(this);
}
});
}
onCreateView()
フラグメントを変更すると、新しいフラグメントが表示されるたびに呼び出されます。
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState)
以下の方法を使用して、フラグメントがユーザーの前面に表示されるタイミングを決定します。
private boolean loding= false; // your boolean flage
@Override
public void setUserVisibleHint(boolean isFragmentVisible) {
super.setUserVisibleHint(true);
if (this.isVisible()) {
// we check that the fragment is becoming visible first time or not
if (isFragmentVisible && !loding) {
//Task to doing while displaying fragment in front of user
loding = true;
}
}}
onResume()
フラグメントがユーザーに表示されるたびに呼び出されます。そうでない場合は、コードに何か問題があります
onCreateView()
フラグメントがUIを描画する必要がある最初のときに呼び出されます
更新:この受け入れられた答えは5年前に機能していました-それはもう機能しません