2017-07-01 12 views
0

ViewPagerにある3つのフラグメントを作成しました。特定のフラグメントがユーザーに表示されている場合にのみ、サーバーからデータを取得しようとしています。そのために、setUserVisibleHint()でWebサービスメソッドを呼び出しました。しかし、私はそのメソッド内でgetActivity()を使用しているときにNullPointerExceptionを取得しています。データを一度だけ読み込み、そのデータをユーザーに表示する方法を確認するにはどうすればよいですか?ここでは、コード:getActivity()を呼び出すときにsetUserVisibleHint()がNullPointerExceptionをスローする

@Override 
    public void setUserVisibleHint(boolean isVisibleToUser) { 
     super.setUserVisibleHint(isVisibleToUser); 
     if(isVisibleToUser && !_areLecturesLoaded){ 
      if(getActivity() == null){ //this is always null 
       Log.e("Fragment1","No Activity"); 
      }else{ 
       getLatLong(); 
      } 
      _areLecturesLoaded = true; 
     } 
    } 

    private void getLatLong() { 
     mGoogleApiClient = new GoogleApiClient.Builder(getActivity()) 
       // The next two lines tell the new client that “this” current class will handle connection stuff 
       .addConnectionCallbacks(this) 
       .addOnConnectionFailedListener(this) 
       //fourth line adds the LocationServices API endpoint from GooglePlayServices 
       .addApi(LocationServices.API) 
       .build(); 
    } 

私はONATTACH()メソッドはsetUserVisibleHint(後に呼び出さなっていることを確認しました)。アクティビティが添付される前に、setUserVisibleHint()が起動しています。

+0

チェックチェックするにはgetActivity() '.call' isAdded() 'を呼び出します。 – Adithya

+0

onUttach()メソッドの前にsetUserVisibleHint()が呼び出されています。つまり、フラグメントが添付される前に、setUserVisibleHint()メソッドが起動されます。どうすればこの問題を解決できますか? –

+0

私の答えを参照してください私はいくつかのコードを追加します – max

答えて

0

これを試してみてください。

boolean isVisible=false; 
@Override 
public void setUserVisibleHint(boolean isVisibleToUser) { 
    super.setUserVisibleHint(isVisibleToUser); 
    isVisible=isVisibleToUser; 

} 

@Override 
public void onAttach(Context context) { 
    if(visible){ 
    // do what you must todo 
    }else{ 
    //do what you must todo 
    } 

} 
+0

少しのコード例は大きな助けになるでしょう。 –

+0

上記のコードにあります。 'case FRAGMENT1:'はフラグメントが初めて読み込まれたときには呼び出されません。しかし、スワイプの後、 'onPageSelected()'は 'FRAGMENT2'と' FRAGMENT3'のために働いています。そして、私が 'FRAGMENT1'に戻った場合、' case FRAGMENT1: 'が呼び出されています。 –

+0

初めてデータをロードしています。しかし、私はスワイプして断片に戻ってくる。データがロードされていない。 –

1

onAttach()が呼び出されたときに、アクティビティの参照を維持し、どこでも代わりにこのようgetActivity() それを使用:フラグメントは `呼び出す前に、アクティビティに追加されている場合

@Override 
public void onAttach(Activity activity) { 
      super.onAttach(activity); 
      mActivity = activity; 
      } 
+0

少しのコード例が大きな助けになるでしょう。 –

関連する問題