我有ViewPager
,其中包含各种Fragments
。在其中一个中,我正在调用Google Places Api来根据我的输入检索一些数据。稍后,当我转到下一个Fragment
时,如果我想返回上一个Fragment
(以引入另一个输入),我无法检索数据。
以下代码:
@Override
public void onStart() {
super.onStart();
mGoogleApiClient.connect();
}
@Override
public void onStop() {
if(mGoogleApiClient.isConnected())
mGoogleApiClient.disconnect();
super.onStop();
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
final View v = inflater.inflate(R.layout.my_fragment_layout, container, false);
mGoogleApiClient = new GoogleApiClient
.Builder(getActivity().getApplicationContext())
.addApi(Places.GEO_DATA_API)
.addApi(Places.PLACE_DETECTION_API)
.addConnectionCallbacks(this)
.addOnConnectionFailedListener(this)
.build();
/* init my components */
Places.GeoDataApi.getPlaceById(mGoogleApiClient, placeId)
.setResultCallback(new ResultCallback<PlaceBuffer>() {
@Override
public void onResult(@NonNull PlaceBuffer buffer) {
/* do my stuff */
}
});
return v;
}
我的问题是,当我从下一个Fragment
转回并立即插入另一个输入时,我无法访问onResult,因为mGoogleApiClient会在获得回调结果之前断开连接。我必须插入两次才能使其正常工作。
我猜我在Fragment
的生命周期中处理我的mGoogleApiClient对象时遇到问题。调试我的应用程序我发现内存中存在两个不同的对象mGoogleApiClient,因为Fragment
的{{1}}(在muy View
中再次前进和后退)。
有没有办法处理ViewPager
实例或连接本身?
提前致谢!
答案 0 :(得分:1)
问题是,你误解了片段的目的 - 它只是UI(和Activity也是如此)。不要放置业务逻辑,例如在其中获取数据。创建单独的“模型”类,它将存储在Application(可能是Activity)中并绑定到该Application(Activity)的生命周期。通过某些接口Activity实现
提供这些数据