【发布时间】:2017-07-01 03:02:22
【问题描述】:
我在 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();
}
我已验证 onAttach() 方法在 setUserVisibleHint() 之后被调用。在附加 Activity 之前,setUserVisibleHint() 正在启动。
【问题讨论】:
-
在调用
getActivity().callisAdded()检查之前检查是否将片段添加到活动中。 -
setUserVisibleHint() 在 onAttach() 方法之前被调用。这意味着在附加片段之前, setUserVisibleHint() 方法被触发。我该如何解决这个问题?
标签: android android-fragments android-tablayout