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,因爲你是正確的方法,但它不能解決我的問題。 –