按返回不会返回到上一个片段

2024-02-22

我在将片段事务添加到返回堆栈时遇到问题。我有一个主要活动,其中我使用菜单片段填充布局:

public class MainActivity extends ActionBarActivity{

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    getFragmentManager().beginTransaction().add(R.id.frag_container, new MainMenuFragment()).commit();
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.main, menu);
    return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
    // Handle action bar item clicks here. The action bar will
    // automatically handle clicks on the Home/Up button, so long
    // as you specify a parent activity in AndroidManifest.xml.
    int id = item.getItemId();
    if (id == R.id.action_settings) {
        return true;
    }
    return super.onOptionsItemSelected(item);
}

}

然后,在 MainMenuFragment 内,用户选择某个选项,导致菜单片段替换为其他片段:

public class MainMenuFragment extends Fragment implements OnItemClickListener{
    GridView grid;
    FragmentManager manager;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    View root = inflater.inflate(R.layout.main_menu_fragment, container, false);

    manager = getActivity().getFragmentManager();
    grid = (GridView) root.findViewById(R.id.gridView1);

    grid.setAdapter(new MenuTileAdapter(getActivity()));
    grid.setOnItemClickListener(this);

    return root;
}

@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
    FragmentTransaction trans = manager.beginTransaction();
    if (position == 0){
        trans.replace(R.id.frag_container, new BasicSettingsFragment());
        trans.addToBackStack(null);
        trans.commit();
    }
}

}

据我了解,这应该使得当用户按下设备上的后退按钮时,他们将返回到菜单片段,但会退出应用程序。我究竟做错了什么?


In your Activity覆盖:

@Override
public void onBackPressed() {
    if (getFragmentManager().getBackStackEntryCount() > 0) {
        getFragmentManager().popBackStack();
    } else {
        super.onBackPressed();
    }
}

也许您需要在每个提交的片段事务中使用:

FragmentTransaction.addToBackStack(null);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

按返回不会返回到上一个片段 的相关文章

随机推荐

  • 有没有办法将“if case”语句编写为表达式?

    考虑这段代码 enum Type case Foo Int case Bar Int var isBar Bool if case Bar self return true else return false 真恶心 我想写这样的东西 en
  • 两个 beta 分布的乘积

    假设我有两个随机变量 X 1 1 Y 2 2 我想计算 Z XY 的分布 随机变量的乘积 With scipy 我可以通过以下方式获取单个 Beta 版的 pdf from scipy stats import beta rv beta a
  • “完成”按钮未触发 Xamarin Entry 上的“完成”事件

    我添加后iOS 上的 完成 按钮 https developer xamarin com recipes cross platform xamarin forms ios add done to keyboard 在 Xamarin For
  • 跨版本序列化和反序列化 .net 对象的最佳实践

    使用 NET XML 序列化程序将对象序列化到数据库 该对象可能会随着时间的推移而发生变化 因此数据库中同时存在多个版本 有关构建代码的最佳方法的任何建议 以便您仍然可以将此对象反序列化为最新版本 界面 地图 手动序列化等 序列化对象中有一
  • 如何在Linux中设置CLASSPATH让java找到jar文件?

    在Linux下我尝试运行一个jar文件 如下所示 java jar plantuml jar testdot 当有CLASSPATH设置为以下任意一项 文件位于 home user plantuml jar export CLASSPATH
  • LabelPropagation - 如何避免被零除?

    使用时标签传播 http scikit learn org stable modules generated sklearn semi supervised LabelPropagation html 我经常遇到这个警告 恕我直言 这应该是
  • 在 flutter 中使用 new 关键字[重复]

    这个问题在这里已经有答案了 最近开始关注flutter优达学城课程 https classroom udacity com courses ud905在尝试创建基本应用程序时 我遇到了一些我不清楚的事情 添加小部件时 我注意到同时执行这两项
  • Jquery:将ajax调用的值返回给调用者函数?

    我试图从函数返回 ajax 调用返回的值 但它只返回 未定义 如果 ajax 调用发出警报 响应 它将返回正确的值 这是代码 我做错了什么 insertCandidate live click function e var ids this
  • 复杂的SQL查询建议请

    我有三个表 其架构如下 Table Apps ID bigint USERID Bigint START TIME datetime 1 13 2013 05 03 04 42 55 2 13 2013 05 12 06 22 45 3 1
  • 在python中检测并删除锁定的文件

    我想在 Unix 上使用 python 检测文件是否被锁定 删除该文件是可以的 假设它有助于检测该文件是否被锁定 该文件最初可能是由另一个进程独占打开的 文档似乎表明 如果文件被锁定 os unlink 不一定会返回错误 Ideas 检查文
  • 调用栈和反汇编疑问

    三大疑点 1 假设我得到如下调用堆栈 user32 dll InternalCallWinProc 20 0x28 bytes user32 dll UserCallWinProcCheckWow 32 0xb7 bytes user32
  • C++11 异步仅使用一个核心

    我正在尝试在 C 中并行化一个长时间运行的函数 并使用 std async 它只使用一个核心 并不是函数的运行时间太短 因为我目前使用的测试数据大约需要 10 分钟才能运行 根据我的逻辑 我创建了 NThreads 的 Futures 每个
  • 在个人网站上使用 Google Chrome 的 OmniBox [TAB] 功能?

    我认为标题解释了一切 但无论如何我都会更深入地探讨我的问题 如何在我的网站上使用 Chrome 的多功能框 TAB 功能 由于许多用户要求我在网站上实现该功能 我对 OpenSearchDescription 进行了研究 并且在 FireF
  • Scope_Identity()、Identity()、@@Identity 和 Ident_Current() 之间有什么区别?

    I know Scope Identity Identity Identity and Ident Current 所有人都获得身份列的值 但我很想知道其中的区别 我遇到的部分争议是 应用于上述这些函数的范围是什么意思 我还想要一个使用它们
  • 使用 AngularJs 处理 Play scala 发送的分块数据

    I send chunked data with Play Scala 2 2像这样的客户端 Ok chunked data 我想在客户端可用后立即使用它们 如果我只是获取数据并将其打印出来 success 它们同时打印 即收到最后一个数据
  • python:tkinter树视图颜色没有更新

    这是我的第一篇文章 如果格式有误 请原谅 如果需要 我很乐意更改 我正在使用 Tkinter 创建一个用于科学数据分析的界面 对于分子列表 可以在单独的图中表示四个分子 另一方面 我使用树视图显示有关所有分子的一些数字 不仅仅是显示的 当树
  • 在 Cartopy、Robinson 投影中绘制直线

    我正在玩 cartopy 试图了解它是如何工作的 我尝试的第一件事与中的示例非常相似the docs https scitools org uk cartopy docs v0 16 matplotlib intro html在 将数据添加
  • 如何防止点击子表单导致主表单更新

    我的预订系统中有一个表单 其中包含一个子表单 该子表单是 Access 2010 不再具有的旧 ActiveX 日历控件的复制品 一个特殊用途是创建新预订 这意味着该表单 位于 新记录上 但是 在我确定所有数据都经过正确验证之前 我不希望写
  • 发送带有附件的电子邮件

    我有一个邮件程序如下 class Payments LateNoticesMailer lt AsyncMailer def notice payment id payment PaymentDecorator find payment i
  • 按返回不会返回到上一个片段

    我在将片段事务添加到返回堆栈时遇到问题 我有一个主要活动 其中我使用菜单片段填充布局 public class MainActivity extends ActionBarActivity Override protected void o