2

我有一个ViewPager其中包含各种Fragments。在其中的一个中,我打电话给Google Places Api根据我的输入检索一些数据。稍后,当我转到下一个Fragment时,如果我想返回到之前的Fragment(以引入另一个输入),我无法检索数据。下面如何处理片段上的GoogleApiClient

代码:

@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回,并立即插入另一个输入,我不能因为mGoogleApiClient获得回调结果之前断开达到onResult。我必须插入两次才能使其工作。

我猜我在通过Fragment的生命周期处理我的mGoogleApiClient对象时遇到问题。调试我的应用程序我发现在内存中有两个不同的对象mGoogleApiClient,这是因为FragmentView的重新创建(前进和后退再次以muy ViewPager)。

有没有办法处理GoogleApiClient实例或连接本身?

在此先感谢!

回答

1

问题是,你误解了片段的目的 - 它只是UI(和活动太)。不要放置业务逻辑,例如在其中获取数据。创建单独的'模型'类,它将存储在应用程序(可能是活动)中并绑定到该应用程序(活动)的生命周期。通过一些界面提供这些数据活动实施

+0

感谢您的答案,我upvoting,因为你是正确的方法,但它不能解决我的问题。 –