2014-03-29 32 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