setUserVisibleHint()在调用getActivity()

时间:2017-07-01 03:02:22

标签: android android-fragments android-tablayout

我创建了ViewPager中的3个片段。我只是在特定片段对用户可见时才尝试从服务器获取数据。为此,我在setUserVisibleHint()中调用了我的Web服务方法。但是当我在该方法中使用getActivity()时,我得到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();
    }

我已经验证在setUserVisibleHint()之后调用了onAttach()方法。在附加Activity之前,setUserVisibleHint()正在启动。

2 个答案:

答案 0 :(得分:1)

在调用onAttach()时保留活动参考,并在任何地方使用它而不是getActivity() 像这样:

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

答案 1 :(得分: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
    }

}