嘿伙计我试图制作一个活动,当一个抽屉中的项目被选中时,有一个framelayout发生了变化,但我的问题是当我旋转屏幕时,被替换的片段会回到之前的片段。恩。我打开了应用程序,它向我显示了片段A然后我尝试从抽屉中选择另一个片段B片段然后当我尝试旋转而片段B上的Im时它返回片段A.这是我的代码。 / p>
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initViews();
passedFragment = this.getIntent().getExtras().getString("fragmentClass");
if(savedInstanceState != null){
getSupportFragmentManager().findFragmentByTag(FRAGMENT_TAG);
}
switch (passedFragment){
case "com.serverus.oom.fragments.FragmentAgency":
fragmentClass = FragmentAgency.class;
menuItemReserve = mMenu.findItem(R.id.agency_menu_item);
break;
case "com.serverus.oom.fragments.FragmentServices2":
fragmentClass = FragmentServices2.class;
menuItemReserve = mMenu.findItem(R.id.services_menu_item);
break;
case "com.serverus.oom.fragments.FragmentContactUs":
fragmentClass = FragmentContactUs.class;
menuItemReserve = mMenu.findItem(R.id.contact_menu_item);
break;
default:
fragmentClass = FragmentAgency.class;
break;
}
fragmentReplace(fragmentClass);
}
public void fragmentReplace(Class fragmentClass) {
try {
fragment = (Fragment) fragmentClass.newInstance();
} catch (Exception e) {
e.printStackTrace();
}
// Insert the fragment by replacing any existing fragment
FragmentManager fragmentManager = this.getSupportFragmentManager();
FragmentTransaction ft = fragmentManager.beginTransaction();
ft.replace(R.id.flContent, fragment, FRAGMENT_TAG).addToBackStack(null);
ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_CLOSE).commit();
}
先谢谢
答案 0 :(得分:0)
在创建的片段中使用setRetainInstance(true)。有关详细信息,请参阅此问题 - Further understanding setRetainInstance(true)
setRetainInstance(true) - 应该在片段活动的onCreate()中提及。
请注意
注意:每个片段都需要一个唯一的标识符,如果重新启动活动,系统可以使用该标识符来恢复片段(您可以使用它来捕获片段以执行事务,例如删除它)。有三种方法可以为片段提供ID:
•提供具有唯一ID的android:id属性。
•使用唯一字符串提供android:tag属性。
•如果您不提供前两个,系统将使用容器视图的ID。
这强烈暗示如果在Activity.onCreated()中执行setContentView(R.layout.whatever)并且该布局包含具有setRetainInstance(true)的片段,那么当重新创建活动时,将再次使用其搜索id或tag。
答案 1 :(得分:0)
你能展示你的所有代码吗?我的帮助可能会更好......
也许是因为你没有将savedFragment存储在saveInstance中,当你旋转屏幕时,活动会重新创建自己,passFragment包含null。所以" FragmentAgency.class"旋转时将始终设置(默认值)。
此代码:
passedFragment = this.getIntent().getExtras().getString("fragmentClass");
..返回null,因为你只能获得" fragmentClass"在startActivity(..)创建活动时的值。
检查: http://developer.android.com/training/basics/activity-lifecycle/recreating.html了解如何使用活动状态来保存和加载活动数据。
答案 2 :(得分:0)
-(void) viewDidLoad
{
[super viewDidLoad];
self.navigationItem.backBarButtonItem.title = @"Back to A"
self.navigationItem.backBarButtonItem.image = nil;
}