2

を含むViewPagerがあります。その中の1つでは、私の入力に基づいていくつかのデータを取得するためにGoogle Places APIを呼びます。その後、次のFragmentに行くと、前のFragment(別の入力を導入する)に戻る場合、データを取得できません。フラグメントでGoogleApiClientを処理する方法

以下のコード:私の問題は、私は戻って次の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; 
} 

mGoogleApiClientがコールバック結果を取得する前に切断するので、私ははonResultに到達することはできません。私はそれを動作させるために2回挿入する必要があります。

Fragmentのライフサイクルを通じてmGoogleApiClientオブジェクトの処理に問題があると思います。私のアプリケーションのデバッグFragmentViewの再作成のためにメモリに2つの異なるオブジェクトmGoogleApiClientがあることがわかりました(muYで前進し、また前に戻ります)ViewPager

GoogleApiClientインスタンスまたは接続自体を処理する方法はありますか?

ありがとうございます!

答えて

1

問題は、あなたがフラグメントの目的を誤解しているということです。それは単なるUI(アクティビティも)です。データを取り込むなどのビジネスロジックを置かないでください。アプリケーション(多分アクティビティ)に保存され、そのアプリケーション(アクティビティ)のライフサイクルにバインドされる別個の「モデル」クラスを作成します。これらのデータをいくつかのインタフェースで提供するアクティビティimplel

+0

答えをいただきありがとうございます。私はupvotingをしていますが、アプローチについては正しいですが、私の質問は解決しません。 –

関連する問題