我创建了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()正在启动。
答案 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
}
}