将 backstack 与 ViewPager 结合使用

2023-11-21

我正在使用 ViewPager 在我的 Android 应用程序中实现滑动。但是,我希望当用户使用后退按钮而不是结束活动时显示前一个片段。有什么办法可以做到这一点吗? 谢谢 塞巴斯蒂安


我有类似的问题,这就是我解决的方法。我有一个包含 6 个片段的 ViewPager,想要跟踪页面历史记录并能够使用后退按钮在历史记录中向后导航。我创建一个java.util.Stack<Integer>对象,向其添加片段编号(除非您使用后退按钮,请参见下文),然后覆盖onBackPressed()当我的历史堆栈不为空时,使其弹出最后查看的片段而不是使用返回堆栈。

您希望避免在按下后退按钮时将元素推送到堆栈上,否则如果继续使用后退按钮,您将陷入两个片段之间,而不是最终退出。

My code:

MyAdapter mAdapter;
ViewPager mPager;
Stack<Integer> pageHistory;
int currentPage;
boolean saveToHistory;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    mAdapter = new MyAdapter(getSupportFragmentManager());
    mPager = (ViewPager)findViewById(R.id.container);
    mPager.setAdapter(mAdapter);
    mPager.setOffscreenPageLimit(5);

    pageHistory = new Stack<Integer>();
    mPager.setOnPageChangeListener(new OnPageChangeListener() {

        @Override
        public void onPageSelected(int arg0) {
            if(saveToHistory)
                pageHistory.push(Integer.valueOf(currentPage));
        }

        @Override
        public void onPageScrolled(int arg0, float arg1, int arg2) {
        }

        @Override
        public void onPageScrollStateChanged(int arg0) {
        }
    });
    saveToHistory = true;
}

@Override
public void onBackPressed() {
    if(pageHistory.empty())
        super.onBackPressed();
    else {
        saveToHistory = false;
        mPager.setCurrentItem(pageHistory.pop().intValue());
        saveToHistory = true;
    }
};
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将 backstack 与 ViewPager 结合使用 的相关文章

随机推荐

  • TCPDF 图像质量问题

    我正在使用 TCPDF 生成 PDF 文档 并且尝试将徽标添加到页眉中 但图像质量存在问题 后来我发现缩放也存在问题 使用 TCPDF 插入 PDF 文档中的图像会出现质量损失和尺寸问题 我不太关心尺寸 因为我可以改变它 但我无法恢复图像的
  • 有没有私有API可以监控iPhone上的网络流量?

    我需要实现一个应用程序来监视 iPhone 上不同应用程序的入站 出站连接 我的应用程序将使用苹果的 VoIP 和导航器后台多任务功能在后台运行 我可以使用私有 api 因为我的客户不需要应用程序商店上的这个应用程序 Thanks 我熬过来
  • 如何在不同的 .c 文件之间共享变量? [复制]

    这个问题在这里已经有答案了 我怎样才能在一个变量中使用一个变量 c先前已在另一个文件中定义的文件 c file 在文件S c中 int myGlobal 0 在文件A h中 extern int myGlobal 在文件B c中 inclu
  • C# System.Windows.Forms.TreeView:双击时停止自动展开/折叠(并执行另一个处理程序)

    有没有simple双击 TreeView 节点时禁用自动展开 折叠的方法 如果当前系统时间与双击的预期时间相匹配 则在不检查 BeforeExpand BeforeCollapse 的情况下 我无法找到此问题的答案 覆盖 OnNodeMou
  • tf.data 内存泄漏

    我正在创建一个tf data Dataset在 for 循环中 我注意到每次迭代后内存并没有像人们预期的那样被释放 有没有办法向 TensorFlow 请求释放内存 我尝试使用tf reset default graph 我尝试打电话del
  • 如何使用 iTextSharp 对齐文本?

    有如下代码 var workStream new MemoryStream var doc new Document PageSize LETTER 10 10 42 35 PdfWriter GetInstance doc workStr
  • Powershell 最后使用 Ctrl-C 跳过块

    我正在 Powershell 中编写一个监控脚本 使用 Try Finally 来在脚本结束时记录一条消息 该脚本旨在无限期地运行 因此我想要一种方法来跟踪意外退出 所有其他 StackOverflow 帖子和帮助页面我检查过状态 即使您使
  • 如何将环境变量传递给 Ubuntu 上的 Netbeans Makefile?

    我在 Linux Ubuntu 9 04 上使用 Netbeans 构建一个 C 项目 如何传递环境变量以便它对 Makefile 可见 如果我做一个正常的export MYVAR xyz 然后运行make从命令行这当然可以正常工作 但Ne
  • Android MVP:一个 Activity 具有多个 Fragment

    我有一个活动 它托管多个片段 这些片段定义用户注册流程中的每个步骤 该流程很复杂 下一步是由前面步骤中的用户操作定义的 流程如下 MainActivity Fragment1 gt Fragment2 gt Fragment3 gt Fra
  • 如何使用 SVML 指令 [重复]

    这个问题在这里已经有答案了 我正在尝试计算exponential使用 SIMD 的函数 我发现了这个功能 我已经包含了 immintrin h 在我的代码中 我的CPU也有一个SSE旗帜 但gcc正在抱怨error mm exp pd wa
  • dropzone js 将删除网址与删除按钮链接起来

    在 Dropzone Js 中 我正在创建删除按钮 然后将其附加到缩略图中 如何链接直接从服务器获取的 url 以使用删除按钮addRemoveLinks true Write function if you need to add som
  • PrettyPhoto 的 rel 属性验证错误

    看起来 W3C 的验证器在 HTML5 页面的 PrettyPhoto rel 属性上返回验证错误 我该如何解决这个错误 元素 a 上的属性 rel 值有错误 PrettyPhoto gallery1 未注册关键字 PrettyPhoto
  • Android AlertDialog 框 WindowManager$BadTokenException 问题

    我将以下代码用于上下文菜单 然后如果用户选择删除 则会出现对话框消息 infos setOnCreateContextMenuListener new OnCreateContextMenuListener Override public
  • Greasemonkey 可以使用 file:// 协议吗?

    我有一个简单的 Greasemonkey 脚本 UserScript name hello namespace http www webmonkey com description A test of accessing documents
  • Smalltalk 中的运算符可以过载吗?

    Smalltalk 中是否可以重载运算符 我正在寻找教程 示例 Thanks Smalltalk 中不可能进行方法重载 相反 方法重写和称为的技术的组合双重调度用于实现与其他语言中的运算符重载相同的行为 您可以在数学运算符中找到示例实现 这
  • Android Studio:该文件不是项目的一部分,但项目构建成功

    我在android studio中突然出现了一个奇怪的问题 我创建了一个新的 cpp 文件 并将其包含在 Android mk 中 然后我同步了该项目 然而 android studio 仍然抱怨该文件不是项目的一部分 我需要同步 但整个项
  • 找不到模块FindOpenCV.cmake(配置过程中出错)

    我写了一个CMakeLists txt对于一个项目C 它使用OpenCV图书馆 当我尝试使用 cmake 创建项目时 出现下一个配置问题 CMake Error at CMakeLists txt 15 find package Could
  • 如何告诉 Symfony 3 忽略某些注释?

    我正在使用 Symfony 3 开发 API 我想使用apidoc创建文档 APIDoc 使用注释 api get user id Request User information apiName GetUser apiGroup User
  • 如何提取没有索引的数组的键和值[关闭]

    很难说出这里问的是什么 这个问题模棱两可 含糊不清 不完整 过于宽泛或言辞激烈 无法以目前的形式合理回答 如需帮助澄清此问题以便重新打开 访问帮助中心 我想从数组 带有键和值的原始数组 中提取数据 提取数组后 我需要两个新数组 第一个数组仅
  • 将 backstack 与 ViewPager 结合使用

    我正在使用 ViewPager 在我的 Android 应用程序中实现滑动 但是 我希望当用户使用后退按钮而不是结束活动时显示前一个片段 有什么办法可以做到这一点吗 谢谢 塞巴斯蒂安 我有类似的问题 这就是我解决的方法 我有一个包含 6 个