在 ActionBar 中使用 UP 插入符号从 Activity 转到 Fragment - Android 4.0+
Use UP caret in ActionBar to go from Activity to Fragment - Android 4.0+
我一直在研究所有 day/night 的解决方案,但似乎有很多选择可以从 Activity
到 Fragment
,但是 none 在 S.O 为我工作。实际上,我在 Activity
中,我想在 ActionBar
中使用我的应用程序徽标来单击它,然后 return 到 Fragment
。这个 Fragment
是我的 Activity
的 "parent class",这意味着我单击 Fragment
中的一个按钮将我带到我的 Activity
。
但我无法让我看到的所有代码片段都起作用。
我已经把这个放在我的 Activity
的 onCreate()
:
// Shows the up carat near app icon in ActionBar
getSupportActionBar().setDisplayUseLogoEnabled(false);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
我也在 Activity
的 onOptionsItemSelected()
方法中包含了这个:
// Handle action bar actions click
switch (item.getItemId()) {
case android.R.id.home:
android.app.FragmentManager fm= getFragmentManager();
fm.popBackStack();
return true;
default:
return super.onOptionsItemSelected(item);
}
结果是我看到了 "back button" 克拉(如下图),但是当我点击它时没有任何反应。我应该回到我来自的Fragment
。仅供参考,我的 Fragment
class 实际上扩展了 Fragment
(而不是 FragmentActivity
)。我的 Activity
扩展了 ActionBarActivity
,所以我正在寻找适用于 Android 4.0+ 的答案。此外,我的 Fragment
在 return 编辑时不需要相同的实例(必然)。它只有按钮,所以一个新的实例很好,如果它被创建,returning。
感谢您的帮助!!
需要一小行:finish()
。由于 FragmentManager
通过使用 fm.popBackStack();
从其后台弹出一个项目,它仍然需要某种操作才能转到上一个片段。添加 finish()
使当前 Activity
结束。上下文中的行:
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar actions click
switch (item.getItemId()) {
case android.R.id.home:
android.app.FragmentManager fm= getFragmentManager();
fm.popBackStack();
finish();
return true;
default:
return super.onOptionsItemSelected(item);
}
}
我上面的其余代码是正确的,也是需要的,以使其全部正常工作。现在,我可以导航到我的 NavigationDrawer
片段,单击那里的按钮转到 Activity
,然后按导航向上插入符号到 return 到我的 Fragment
随时。这已在三星 Galaxy5 phone.
上成功测试
您在 ActionBar Android doc 的 使用应用程序图标向上导航 部分中没有读到的一件事是,由于您正在使用片段 return 到,你不能使用他们的 <meta-data>
标记指令 在清单文件 中指定父 activity,因为你没有 returning Activity
!而是一个Fragment
。因此,必须通过使用 FragmentManager
.
来实现解决方法
我一直在研究所有 day/night 的解决方案,但似乎有很多选择可以从 Activity
到 Fragment
,但是 none 在 S.O 为我工作。实际上,我在 Activity
中,我想在 ActionBar
中使用我的应用程序徽标来单击它,然后 return 到 Fragment
。这个 Fragment
是我的 Activity
的 "parent class",这意味着我单击 Fragment
中的一个按钮将我带到我的 Activity
。
但我无法让我看到的所有代码片段都起作用。
我已经把这个放在我的 Activity
的 onCreate()
:
// Shows the up carat near app icon in ActionBar
getSupportActionBar().setDisplayUseLogoEnabled(false);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
我也在 Activity
的 onOptionsItemSelected()
方法中包含了这个:
// Handle action bar actions click
switch (item.getItemId()) {
case android.R.id.home:
android.app.FragmentManager fm= getFragmentManager();
fm.popBackStack();
return true;
default:
return super.onOptionsItemSelected(item);
}
结果是我看到了 "back button" 克拉(如下图),但是当我点击它时没有任何反应。我应该回到我来自的Fragment
。仅供参考,我的 Fragment
class 实际上扩展了 Fragment
(而不是 FragmentActivity
)。我的 Activity
扩展了 ActionBarActivity
,所以我正在寻找适用于 Android 4.0+ 的答案。此外,我的 Fragment
在 return 编辑时不需要相同的实例(必然)。它只有按钮,所以一个新的实例很好,如果它被创建,returning。
感谢您的帮助!!
需要一小行:finish()
。由于 FragmentManager
通过使用 fm.popBackStack();
从其后台弹出一个项目,它仍然需要某种操作才能转到上一个片段。添加 finish()
使当前 Activity
结束。上下文中的行:
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar actions click
switch (item.getItemId()) {
case android.R.id.home:
android.app.FragmentManager fm= getFragmentManager();
fm.popBackStack();
finish();
return true;
default:
return super.onOptionsItemSelected(item);
}
}
我上面的其余代码是正确的,也是需要的,以使其全部正常工作。现在,我可以导航到我的 NavigationDrawer
片段,单击那里的按钮转到 Activity
,然后按导航向上插入符号到 return 到我的 Fragment
随时。这已在三星 Galaxy5 phone.
您在 ActionBar Android doc 的 使用应用程序图标向上导航 部分中没有读到的一件事是,由于您正在使用片段 return 到,你不能使用他们的 <meta-data>
标记指令 在清单文件 中指定父 activity,因为你没有 returning Activity
!而是一个Fragment
。因此,必须通过使用 FragmentManager
.