4

フラグメントがユーザーに表示されるたびに、Webサービスを呼び出し、データをフェッチして画面に表示するコードを実行したいと思います。Webサービス部分などが機能するようになりましたが、どのような場合にコードを追加する必要があるのか​​わかりません。

  1. onStart
  2. onResume
  3. onAttach

しかし、私のコードは毎回起動するわけではありません。

基本クラスとしてSherlockFragmentを使用してAndroidv4complibを使用しています。

4

5 に答える 5

12

使用できます

@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
    super.setUserVisibleHint(isVisibleToUser);
    if (isVisibleToUser) { }
    else {  }
}

これを見てください

于 2014-01-10T07:56:07.370 に答える
3

これは非常に古いかもしれませんが、setUserVisibleHint()が私のユースケースの多くで機能しないことがわかりました。代わりに、ViewTreeObserverを使用してハックに頼らなければなりませんでした。

基本的に、フラグメントが初期化された後、フラグメント内のビューを取得し、次のようにします。

myViewInFragment.getViewTreeObserver().addOnGlobalLayoutListener(
    new ViewTreeObserver.OnGlobalLayoutListener() {
        @Override
        public void onGlobalLayout() {
            myMethodWhenFragmentFirstBecomesVisible();
            myViewInFragment.getViewTreeObserver().removeOnGlobalLayoutListener(this);
        }
    });
}
于 2016-02-04T23:19:39.183 に答える
2

onCreateView()

フラグメントを変更すると、新しいフラグメントが表示されるたびに呼び出されます。

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) 
于 2013-01-07T10:31:45.973 に答える
2

以下の方法を使用して、フラグメントがユーザーの前面に表示されるタイミングを決定します。

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;         
    }
}}
于 2017-11-07T06:00:32.763 に答える
-17

onResume()フラグメントがユーザーに表示されるたびに呼び出されます。そうでない場合は、コードに何か問題があります

onCreateView()フラグメントがUIを描画する必要がある最初のときに呼び出されます

更新:この受け入れられた答えは5年前に機能していました-それはもう機能しません

于 2013-01-07T10:39:25.610 に答える