2014-03-29 31 views
1

我正在創建一個應用程序,我正在從Windows Phone 8移植到android。我的Android開發知識是有限的。使用導航抽屜的Android片段狀態

我正在使用導航抽屜。 我已經做了一些實現,我面臨的問題/問題是在它們之間切換時恢復視圖狀態。

我正在使用arcgis android sdk。 視圖1:從互聯網獲取的列表視圖中的地理空間數據。 視圖2:顯示你的位置和地點的地圖視圖中的1個 視圖3選擇(抽頭):一個設置視圖以增大或減小的半徑來從視圖中提取項目1.

當視圖之間切換我想意見保持其狀態(恢復狀態)。

這種情況下的最佳做法是什麼?現在我正在使用片段。 問題是切換片段時onSaveInstanceState沒有被調用。

這是我的代碼轉換的片段,它是不是在所有:)

private void selectItem(int position) { 
    // Create a new fragment and specify the planet to show based on position 
    Fragment f; 
    FragmentTransaction ft = fragManager.beginTransaction(); 
    switch(position) { 
    case 0: 
     if((f = fragManager.findFragmentByTag("home")) == null) { 
      f = Fragment.instantiate(this, HomeFragment.class.getName()); 
      f.setRetainInstance(true); 
      ft.add(R.id.content_frame, f, "home"); 
     } else { 
      ft.attach(f); 
     } 
     break; 
    case 1: 
     if((f = fragManager.findFragmentByTag("map")) == null) { 
      f = Fragment.instantiate(this, MapFragment.class.getName()); 
      f.setRetainInstance(true); 
      ft.add(R.id.content_frame, f, "map"); 
     } else { 
      ft.attach(f); 
     } 
     break; 
    case 2: 
     if((f = fragManager.findFragmentByTag("settings")) == null) { 
      f = Fragment.instantiate(this, SettingsFragment.class.getName()); 
      f.setRetainInstance(true); 
      ft.add(R.id.content_frame, f, "settings"); 
     } else { 
      ft.attach(f); 
     } 
     break; 
    } 
    ft.commit(); 
    // Highlight the selected item, update the title, and close the drawer 
    mDrawerList.setItemChecked(position, true); 
    setTitle(tabs[position]); 
    mDrawerLayout.closeDrawer(mDrawerList); 

} 
+0

你想把你的碎片放入後臺嗎? – Kishan

回答

0

這裏工作得很好,是您恢復片段狀態的示例代碼:

public void addFragments(Fragment fragment, 
     boolean addToBackStack, String tag) { 

    FragmentManager manager = getSupportFragmentManager(); 
    FragmentTransaction ft = manager.beginTransaction(); 

    if (addToBackStack) { 
     ft.addToBackStack(tag); 
    } 
    ft.replace(R.id.content_frame, fragment); 
    ft.commit(); 
} 

這裏片段=您的片段你想要更換。

+0

如果我不想用'Fragment'來堆棧,該怎麼辦? – soommy12

+0

通過方法false的第二個參數。 – Kishan