如何在Fragments上处理GoogleApiClient

时间:2016-11-22 10:48:39

标签: android android-fragments google-play-services google-places-api google-api-client

我有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实例或连接本身?

提前致谢!

1 个答案:

答案 0 :(得分:1)

问题是,你误解了片段的目的 - 它只是UI(和Activity也是如此)。不要放置业务逻辑,例如在其中获取数据。创建单独的“模型”类,它将存储在Application(可能是Activity)中并绑定到该Application(Activity)的生命周期。通过某些接口Activity实现

提供这些数据