片段活动之间的正确反向导航
Proper back navigation between FragmentActivities
我有两个活动:
- MainActivity,它扩展了 FragmentActivity 并具有
- ViewActivity,这只是一个 Activity,以 MainActivity 作为父级。
有一个从 MainActivity 的 Fragments 之一到 ViewActivity 的导航。
问题是,当我从 ViewActivity(按后退按钮)导航回 MainActivity 时,我得到了 activity 的第一个片段,丢失了碎片,我有。
有没有办法在不丢失 Fragments backstack 的情况下回到 FragmentActivity?我怎样才能回到开始 ViewActivity 的片段?
更新
这是我当前的 onCreate from MainActivity 的代码:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//Listen for changes in the back stack
getSupportFragmentManager().addOnBackStackChangedListener(this);
//Handle when activity is recreated like on orientation Change
shouldDisplayHomeUp();
setContentView(R.layout.activity_main);
if (savedInstanceState == null) {
MainFragment mainFragment = new MainFragment();
getSupportFragmentManager().beginTransaction()
.add(R.id.a_main_container, mainFragment)
.commit();
}
}
更新 2
最后,发现问题出在我单击 ActionBar 中的向上按钮时。现在我从 ViewActivity 中删除了操作栏(只是那里不需要它),一切正常。通常的后退按钮将我移动到 Fragment 3,然后移动到 Fragment 2,等等
但是ActionBar中的UpButton是否可以做同样的事情? (仅询问将来的用途)
据我所知,您不知道要返回到哪个片段。再次按下后退按钮会发生什么?
查看 onCreate() 的代码也会有所帮助 activity
据我所知,您需要做的是使用 saveInstancestate 来记住您所在的片段。
我认为这个问题会有所帮助
Once for all, how to correctly save instance state of Fragments in back stack?
您似乎在 MainActivity 的 onCreate 中实例化了您的 Fragment 1,但没有检查 savedInstanceState == null。因此,每次您导航回 MainActivity - 它都会从头开始实例化 Fragment 1。 Post 更多代码,所以我会为您指明正确的方向。
回答更新 2:
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
finish();
return true;
default:
return super.onOptionsItemSelected(item);
}
}
我有两个活动:
- MainActivity,它扩展了 FragmentActivity 并具有
- ViewActivity,这只是一个 Activity,以 MainActivity 作为父级。
有一个从 MainActivity 的 Fragments 之一到 ViewActivity 的导航。 问题是,当我从 ViewActivity(按后退按钮)导航回 MainActivity 时,我得到了 activity 的第一个片段,丢失了碎片,我有。
有没有办法在不丢失 Fragments backstack 的情况下回到 FragmentActivity?我怎样才能回到开始 ViewActivity 的片段?
更新
这是我当前的 onCreate from MainActivity 的代码:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//Listen for changes in the back stack
getSupportFragmentManager().addOnBackStackChangedListener(this);
//Handle when activity is recreated like on orientation Change
shouldDisplayHomeUp();
setContentView(R.layout.activity_main);
if (savedInstanceState == null) {
MainFragment mainFragment = new MainFragment();
getSupportFragmentManager().beginTransaction()
.add(R.id.a_main_container, mainFragment)
.commit();
}
}
更新 2 最后,发现问题出在我单击 ActionBar 中的向上按钮时。现在我从 ViewActivity 中删除了操作栏(只是那里不需要它),一切正常。通常的后退按钮将我移动到 Fragment 3,然后移动到 Fragment 2,等等
但是ActionBar中的UpButton是否可以做同样的事情? (仅询问将来的用途)
据我所知,您不知道要返回到哪个片段。再次按下后退按钮会发生什么?
查看 onCreate() 的代码也会有所帮助 activity
据我所知,您需要做的是使用 saveInstancestate 来记住您所在的片段。
我认为这个问题会有所帮助 Once for all, how to correctly save instance state of Fragments in back stack?
您似乎在 MainActivity 的 onCreate 中实例化了您的 Fragment 1,但没有检查 savedInstanceState == null。因此,每次您导航回 MainActivity - 它都会从头开始实例化 Fragment 1。 Post 更多代码,所以我会为您指明正确的方向。
回答更新 2:
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
finish();
return true;
default:
return super.onOptionsItemSelected(item);
}
}