3

Androidフラグメントに頭を包むのに苦労しています。がありActionBar、スピナー項目をクリックするたびにSpinner新しいを作成します。Fragment次のコードのようなものがあります。

public class MyActivity extends Activity
{
   ...  
   ...
   private void initActionBarSpinner()
   {
      getActionBar().setNavigationMode(ActionBar.NAVIGATION_MODE_LIST);

      OnNavigationListener callback = new OnNavigationListener()
      {
          @Override
          public boolean onNavigationItemSelected(int itemPosition, long itemId)
          {
             if (itemPosition >= 0 && itemPosition < dataSet.size())
             {
                openTagFragment(itemPosition);
                return true;
             }

             return false;
          }
       };

       spinnerAdapter = new ArrayAdapter<String>(this, R.layout.action_bar_spinner, R.id.spinnertAdapterItem, tags);
       getActionBar().setListNavigationCallbacks(spinnerAdapter, callback);
   }

   @Override
   public void onCreate(Bundle savedInstanceState)
   {
      Log.d(TAG, TAG + " oncreate");

      super.onCreate(savedInstanceState);

      initActionBarSpinnerAdapter();
   }

   protected void openTagFragment(int itemPosition)
   {
      Log.d(TAG, "Replacing fragment");

      String fragmentTag = dataSet.get(itemPosition);
      MyFragment myFragment = new MyFragment();
      myFragment.setData(dataSet.get(itemPosition));
      FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction();
      fragmentTransaction.replace(R.id.fragmentContainer, myFragment, fragmentTag);
      fragmentTransaction.addToBackStack(null);
      fragmentTransaction.commit();
   }
}

私が直面している問題: 向きが変わると、新しいフラグメントが作成されます。これは、サーバーから同じデータを再度フェッチすることを意味します。onSaveInstanceState()ローテーション時に既存のフラグメントで呼び出されるのを確認できますが、Fragmentもう一度新しいフラグメントを実行する場合、フラグメントの有効な savedInstance バンドルをいつ、どのように取得しますonCreate()か?

4

0 に答える 0