如何保存具有列表视图的片段的状态

2023-12-30

这是一个情况。我想从片段 A-> B-> C 导航。

B Fragment中有listview。在项目上单击我打开详细视图 C 片段。 当然,我使用了替换方法并在从 B 到 C 的事务处理时添加了 addtoBackStack(null) ,以便在按“返回”时它返回到 B。

一切顺利。但是当我从 C 返回 B 时,视图正在刷新,因此 Web 服务被再次调用。我不想这样做。我想用listview保留B Fragment状态。

我收到了一些保留实例的帖子,但没有多大帮助。

任何帮助深表感谢。

Thanks.


正如所解释的here http://www.vogella.com/articles/AndroidFragments/article.html#usingfragments_您可以使用 onSaveInstanceState() 将数据保存在 Bundle 中,并在 onRestoreInstanceState() 方法中检索该数据。

通常 setRetainState(true) 被提及作为将 ui 状态保持在片段中的方法,但它对您不起作用,因为您正在使用后堆栈。

因此,一个好方法可能是在 onSaveInstanceState() 中保存滚动位置并在 onRestoreInstanceState() 中恢复它,如下所示:

public class MyListFragment extends ListFragment {

@Override
public void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);

     int index = this.getListView().getFirstVisiblePosition();
     View v = this.getListView().getChildAt(0);
     int top = (v == null) ? 0 : v.getTop();

     outState.putInt("index", index);
     outState.putInt("top", top);
}

@Override
public void onActivityCreated(Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);
    [...]
    if (savedInstanceState != null) {
        // Restore last state for checked position.
        index = savedInstanceState.getInt("index", -1);
        top = savedInstanceState.getInt("top", 0);
    }
    if(index!=-1){
     this.getListView().setSelectionFromTop(index, top);
  }

}

此外,您还可以找到更详细的类似示例here http://developer.android.com/guide/components/fragments.html.

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

如何保存具有列表视图的片段的状态 的相关文章

随机推荐

  • 动画 UIView 过渡,例如将点扩展为圆圈

    在我的 iPhone 应用程序中 我需要实现不同类型的转换 那是 从当前视图打开下一个视图 它像一个点 并且点像一个圆圈一样慢慢扩大 在圆圈中下一个视图将部分显示 最后圆圈完全扩大 下一个视图完全显示 我搜索了很多像 CATransitio
  • 插入sql数据库时处理大量数据

    在我的代码中 用户可以上传一个 Excel 文档 希望包含其电话联系人列表 作为开发人员 我应该读取该 Excel 文件 将其转换为数据表并将其插入数据库 问题是 一些客户有大量的联系人 比如 5000 个甚至更多的联系人 当我尝试将这么多
  • 使用 COALESCE 函数在变量中附加消息

    下面是我的代码 DECLARE msg NVARCHAR MAX NULL WITH CTE AS SELECT A AS Message UNION SELECT B AS Message UNION SELECT C AS Messag
  • GCC 对弱 const 变量的优化错误

    我有一种奇怪的感觉gcc处理事情时的行为弱常量变量在不同的优化级别 即 O0 or O1 这是代码 def h 声明 const int var int copy int do copy void weak c weak var定义 do
  • SQL Server 2005,批量更新或插入

    我正在寻找一种解决方案来执行插入 重复键更新等 SQL Server 2005 中的操作 此操作可能会插入或更新大量条目 SQL Server 2008 有一个简洁的 MERGE 操作 可以完美地完成此操作 问题是我们只能使用 SQL Se
  • node.js:从标准输入读取同步?

    是否可以从node js中的stdin同步读取 因为我正在用 JavaScript 编写一个 Brainfuck 的 JavaScript 编译器 只是为了好玩 Brainfuck支持需要同步实现的读操作 我试过这个 const fs re
  • AJAX 请求中的内容类型和数据类型是什么?

    POST 请求中的内容类型和数据类型是什么 假设我有这个 ajax type POST url v1 user datatype application json contentType text plain success functio
  • 如何使用 C/C++ 获取数字锁定状态?

    我读过 Gdk 论坛链接 上面说从 3 0 版本开始就实现了获取 num lock state api 但我使用的是 2 4 版本 无法更新到 3 0 版本 因为我需要支持较低的 Linux 版本 这是讨论链接 http mail gnom
  • 如何为列表的每个索引评分

    def voting borda rank ballots list of list of str gt tuple of str list of int 该参数是一个 4 元素列表的列表 表示单个选区的排名选票 The 博尔达伯爵 htt
  • 内核模块与用户空间程序通信的最佳方式是什么?

    这个问题看起来很简单 但我想发送一个事件来通知我的用户空间程序模块缓冲区已准备好读取 例如 我的内核模块中有一个缓冲区 其数据将由用户空间程序消耗 如果所有数据都被消耗 内核模块必须在新数据到达时通知我的程序 这是生产者 消费者的典型问题
  • 验证字母输入上的文本

    任何人都在 TextBox 上使用 AngularJS 验证 这样就只能输入字母了 取决于你想要什么 字母和空格 ng pattern a zA Z s 字母无空格 ng pattern a zA Z
  • Dropzone:防止 addfile 两次

    我正在使用 dropzone 将图像上传到图库 我通过按钮提交 是否可以防止两次添加相同的文件 我不太确定是否检查名称或名称和尺寸 这是我的代码
  • EF Model First 的 1:1 关系问题

    我正在尝试使用 EF 开发一个模型优先的应用程序 我尝试了一切方法来实现分表模式和 1 1 关系 但看起来 EF 不允许我这样做 假设我确实使用 Model First 有没有一种方法可以建立 1 1 关系 而不会弄乱生成的文件和 EF 带
  • 调试时 msvsmon.exe 崩溃

    当我在 VS 2013 update 3 中调试时 msvsmon exe 在遇到断点时崩溃 它显示 调试器的工作进程 msvsmon exe 意外退出 调试将中止 我没有使用远程调试 是否可以关闭 msvsmon exe 以避免在调试时调
  • 如何改变点图的形状?

    我有一个具有以下基本结构的数据文件 Type Tm A 1 A 2 A 3 B 3 B 3 C 1 C 1 C 2 我正在使用它制作点图 ggplot data df aes x Tm fill Type geom dotplot binw
  • 加快 R 中固定宽度格式表的导入速度

    我正在从 R 中的固定宽度格式 txt 文件导入表格 该表大约有 100 个观测值和 200000 行 下面几行 11111 2008 7 31 21 2008 8 1 21 3 4 6 18 4 7 0 12 0 0 0 0 0 1 0
  • CFHTTP:第一个请求快,后续慢

    目前我在使用 CF10 的 CFHTTP 时遇到了很多麻烦 首先 我的测试脚本
  • Symfony2 学说强制转换为十进制

    我在 Symfony2 中使用 Sonata Admin Bundle 并有一个自定义过滤器 在数据库中 列是浮动的 无法更改 如果输入 1333 33 将不会有结果 一种解决方案是使用 CAST CAST o price AS DECIM
  • C for 循环突然停止[重复]

    这个问题在这里已经有答案了 我试图读取图中两个节点之间的距离并将其存储在数组中 但循环无法按预期工作 它突然停止了 Output Edge Number 4 Enter distance between two nodes Example
  • 如何保存具有列表视图的片段的状态

    这是一个情况 我想从片段 A gt B gt C 导航 B Fragment中有listview 在项目上单击我打开详细视图 C 片段 当然 我使用了替换方法并在从 B 到 C 的事务处理时添加了 addtoBackStack null 以