Android - 保存/恢复片段状态

2023-11-21

我有一个活动,其中我浏览了几个片段。在每个片段中我都有几个视图(EditText, ListView, Map, etc).

如何保存当时显示的片段实例?我需要它在活动时工作onPause() --> onResume()。当我从另一个片段返回时(从后台弹出),我也需要它工作。

从主要Activity我调用第一个片段,然后从该片段中调用下一个片段。

我的活动代码:

public class Activity_Main extends FragmentActivity{

public static Fragment_1 fragment_1;
public static Fragment_2 fragment_2;
public static Fragment_3 fragment_3;
public static FragmentManager fragmentManager;

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

     fragment_1 = new Fragment_1();

     fragment_2 = new Fragment_2();

     fragment_3 = new Fragment_3();

     fragmentManager = getSupportFragmentManager();
     FragmentTransaction transaction_1 = fragmentManager.beginTransaction();
     transaction_1.replace(R.id.content_frame, fragment_1);
     transaction_1.commit();
}}

然后这是我的片段之一的代码:

public class Fragment_1 extends Fragment {

      private EditText title;
      private Button go_next;


      @Override
      public View onCreateView(final LayoutInflater inflater,
        ViewGroup container, Bundle savedInstanceState) {

            View rootView = inflater.inflate(R.layout.fragment_1,
            container, false);

            title = (EditText) rootView.findViewById(R.id.title);

            go_next = (Button) rootView.findViewById(R.id.go_next);

            image.setOnClickListener(new View.OnClickListener() {

         @Override
         public void onClick(View v) {

                 FragmentTransaction transaction_2 = Activity_Main.fragmentManager
                .beginTransaction();

                 transaction_2.replace(R.id.content_frame,
                  Activity_Main.fragment_2);
                 transaction_2.addToBackStack(null);
                 transaction_2.commit();  

            });
        }}

我查了很多资料但没有明确的。有人可以给出一个明确的解决方案和一个例子吗?


当片段移至后台堆栈时,它不会被销毁。所有实例变量都保留在那里。所以这是保存数据的地方。在onActivityCreated您检查以下条件:

  1. 捆绑包 != null 吗?如果是,那就是保存数据的地方(可能是方向改变)。
  2. 实例变量中是否保存了数据?如果是,请从它们恢复您的状态(或者什么都不做,因为一切都应该如此)。
  3. 否则,您的片段将首次显示,请重新创建所有内容。

编辑:这是一个例子

public class ExampleFragment extends Fragment {
    private List<String> myData;

    @Override
    public void onSaveInstanceState(final Bundle outState) {
        super.onSaveInstanceState(outState);
        outState.putSerializable("list", (Serializable) myData);
    }

    @Override
    public void onActivityCreated(Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);

        if (savedInstanceState != null) {
            //probably orientation change
            myData = (List<String>) savedInstanceState.getSerializable("list");
        } else {
            if (myData != null) {
                //returning from backstack, data is fine, do nothing
            } else {
                //newly created, compute data
                myData = computeData();
            }
        }
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android - 保存/恢复片段状态 的相关文章

  • 如何在 Android 中更改 Drawable 的颜色?

    我正在开发一个 Android 应用程序 并且我有一个从源图像加载的可绘制对象 在此图像上 我想将所有白色像素转换为不同的颜色 例如蓝色 然后缓存生成的 Drawable 对象 以便稍后使用它 举例来说 假设我有一个 20x20 PNG 文
  • 如何在android中显示对话框之外的图像?

    我试图在对话框片段的顶部显示配置文件图像 一半在图像之外 我在下面附加了示例对话框 就像那样 并尝试了旧 Stackoverflow 解决方案中的所有 FrameLayout 协作 但我无法存档此内容 请给我正确的解决方案 谢谢 Updat
  • socket.io xhr 在连接缓慢时出现错误(3G 移动网络)

    当我在 3G 移动网络 互联网连接速度慢 上测试我的真实聊天应用程序时 Socket io反复断开然后重新连接 我已经记录了原因 它说 xhr post error 这提高了 transport error 然后断开连接 我可以知道什么意思
  • 覆盖 Android 中的电源按钮

    我正在开发一个应用程序 其中我需要在按下电源按钮时执行一个操作 但不幸的是我无法处理按下电源按钮时的操作 我尝试使用 onKeyDown 和dispatchKeyEvent 方法 但似乎没有任何效果 任何人都可以建议我解决这个问题的任何其他
  • Android 全屏对话框确认和拒绝操作

    材料设计中的全屏对话框应该在操作栏 工具栏上有确认和拒绝操作 我的问题是 我该怎么做 显示对话框 getFragmentManager beginTransaction add R id container new MyDialogFrag
  • ADB TCPIP 连接问题

    我有两台 Galaxy S3 其中一个已扎根 另一个则未扎根 因此 当我尝试通过本地网络连接它们时 计算机可以看到已root的计算机 但是正常的就卡在tcpip这一步了 所以 我写 adb tcpip 5555 It says restar
  • 透明 9patch 图像:显示出线条

    我得到了一个透明的 9 补丁图像 其中有 9 条补丁线显示槽 This is the output 显然我不希望水平线可见 这就是我创建 9patch 的方式 This is the final image that is used in
  • 将 java 中的 byte[] 转换为 C++ 中的 unsigned char* 的正确方法,反之亦然?

    我是 C 和 JNI 的新手 我尝试找到一种正确的方法 通过使用 JNI 将 java 中的 byte 转换为 C 中的 unsigned char 反之亦然 我正在安卓上工作 在谷歌和SO中寻找解决方案后 我还没有找到将java中的byt
  • Android -room 持久库 - DAO 调用是异步的,因此如何获取回调?

    从我读到的Room 不允许您在主线程上发出数据库查询 因为可能会导致主线程延迟 所以想象一下我正在尝试更新 UI 主线程上的文本视图 其中一些数据我将如何得到回调 让我给你举个例子 想象一下 我想将我的业务模型数据存储到一个名为 事件 的对
  • Android蓝牙java.io.IOException:bt套接字已关闭,读取返回:-1

    我正在尝试编写一个代码 仅连接到运行 Android 5 0 KitKat 的设备上的 目前 唯一配对的设备 无论我尝试了多少方法 我仍然会收到此错误 这是我尝试过的最后一个代码 它似乎完成了我看到人们报告为成功的所有事情 有人能指出我做错
  • 如何使用 SharedPreferences 保存多个值?

    我正在开发一个字典应用程序 在我的应用程序中 我假设用户想要保存最喜欢的单词 我决定使用共享首选项保存这些值 我知道 SQLite 和文件更好 但我坚持使用 SharedPreferences 所以继续使用它 下面是我的代码 Overrid
  • 安卓。 CalendarView...一次仅显示一个月的日历

    我正在使用 CalendarView 其中我想一次仅查看一个月的日历并滚动查看下个月 但 CalendarView 一次显示所有月份 下面是我的代码
  • Android 中的库可以有自己的意图过滤器吗?

    我想开发一个可以包含在其他 Android 应用程序中的库来拦截某些类型的意图 是否可以 我创建了一个库和一个测试项目 两者都有自己的AndroidManifest xml文件 在库的清单中 我为操作 TEST 定义了一个意图过滤器 但是
  • Android:GestureDetector 无法与选项卡(TabActivity、Tabwidget)一起工作(gestureDetector.onTouchEvent(event) 始终为 false)

    我已经用不同的子活动实现了 TabActivity intent new Intent setClass this MyChildTabActiviy class Initialize a TabSpec for each tab and
  • 如何将样式应用于我拥有的所有 TextView? [复制]

    这个问题在这里已经有答案了 可能的重复 设计所有 TextView 或自定义视图 的样式 而不向每个 TextView 添加样式属性 https stackoverflow com questions 6801890 styling all
  • 如何在android中通过蓝牙向配对设备发送短信?

    在我的应用程序中 我想通过蓝牙发送和接收短信 我可以在列表视图中看到配对设备名称和地址的列表 但是当我尝试向配对设备发送文本时 什么也没有发生 在其他设备中没有收到文本 这是我向配对设备发送消息的代码 private void sendDa
  • 禁用 Android 菜单组

    我尝试使用以下代码禁用菜单组 但它不起作用 菜单项仍然启用 你能告诉我出了什么问题吗 资源 菜单 menu xml menu menu
  • ECDH使用Android KeyStore生成私钥

    我正在尝试使用 Android KeyStore Provider 生成的私有文件在 Android 中实现 ECDH public byte ecdh PublicKey otherPubKey throws Exception try
  • Android MulticastSocket.joinGroup 不会触发发送 IGMP 消息

    Code MulticastSocket s new MulticastSocket InetAddress addr InetAddress getByName 230 230 230 1 s joinGroup addr 在 Ubunt
  • 如何访问我的 Android 程序中的联系人

    我正在制作一个短信应用程序 并且想要访问我的 Android 应用程序中的联系人 我想访问联系人 就像他们在实际联系人列表中一样 选择后 我需要返回到我的活动 在其中我可以向该人发送短信 或者是否可以访问存储联系人的数据库 我的代码如下所示

随机推荐

  • 如何防止useQuery在状态改变时运行?

    我正在使用 React Apollo 从我的服务器获取数据 当我的页面加载时 我使用 useQuery 来检索数据 这很好用 问题是当我对搜索表单进行更改时 这会更新状态 从而导致不必要的重新渲染 从而再次调用服务器 我只想在页面加载和单击
  • 如何打印lda主题模型和每个主题的词云

    from nltk tokenize import RegexpTokenizer from stop words import get stop words from gensim import corpora models import
  • 如何提前停止处理 JSP?

    我有一个 JSP 页面 它调用一个函数并检查其返回值 如果返回值不为空 JSP 页面将继续使用它 如果返回值是null 我希望JSP页面的处理停止 这是因为该函数将在返回null对象之前执行重定向 而且 其余的JSP代码显然使用了这个对象
  • django 2无法将环境变量从.env文件加载到setting.py文件

    我尝试将环境变量从名为 env 的文件加载到 settings py 文件 在这里 我创建了 env 文件和设置文件同一文件夹 这是我的 env 文件 DEBUG on SECRET KEY ksmdfw3324 jefm DATABASE
  • Android:如何从 tabhost 调用选项卡内 Activity 的函数

    我有一个带有三个选项卡的选项卡主机 每一项都是一项活动 我希望在操作栏中有一个按钮 顶部的栏上有常用按钮 调用活动选项卡的功能 例如 添加函数可以根据单击按钮时出现的选项卡向每个选项卡添加不同的内容 因此 我询问如何从 tabHost 调用
  • 从Python文本文件中的一行中提取随机单词/字符串

    我有一个文本文件 一行有六个单词 我需要从该行随机生成一个单词 文本文件名为 WordsForGames txt 我正在制作一个刽子手游戏 这是我到目前为止所拥有的 我有点迷失请帮助 import random import os prin
  • AVAsset读者寻求

    我需要寻找音频文件并提取块 我正在尝试使用 AVAssetReader 我看到的错误是 如果我在一段时间内从不同的偏移量读取音频 我得到的平均值 块 是不同的 例如 如果我从 0 1 秒到 0 5 秒读取音频 我会得到不同的结果 如果我从
  • Ansible 变量名称 `environment` 被保留?

    我今天遇到了一个奇怪的情况 我在剧本中调用了我的一个变量environment 如果我使用转储变量debug指令 显示ok environment development 但是如果我尝试使用脚本访问它 environment 它总是被赋予一
  • JavaScript 中的自动类型转换

    JavaScript 中的以下所有表达式都非常明显 var x 10 10 的价值x is 20 x 10 10 的价值x在这种情况下是1010因为 运算符超载 如果任何操作数是字符串类型 则进行字符串连接 如果所有操作数都是数字 则执行加
  • 如何从 Mac OS X 的终端运行 python 脚本而无需输入完整路径?

    我使用的是 Mac OS 10 6 Snow Leopard 我正在尝试将一个目录添加到我的 PATH 变量中 这样我就可以运行一个我编写的小脚本 只需在终端提示符下键入 python Alarm py 我将路径放入 profile 文件中
  • 覆盖/扩展 MVC 控制器/区域

    我目前正在开发一个 MVC 项目 我正在尝试弄清楚如何扩展区域内现有控制器的路由 特别是从另一个项目 例如 我有一个控制器 其区域如下所示 namespace MyProject Areas Foo Controllers Authoriz
  • 如何在 JavaScript 中计算字符串的长度(以像素为单位)?

    如何在 JavaScript 中计算字符串的长度 以像素为单位 你可以使用简单的代码 var canvas document createElement canvas var ctx canvas getContext 2d ctx fon
  • 将 localized.strings 转换为电子表格?

    是否有标准方法将 localized strings 文件转换为 csv 格式 或者可以通过 OpenOffice 等电子表格程序导入的其他格式 谢谢 答案有点过时 但是这个在线工具可以更好更快地完成工作 http localise biz
  • 如何从 Internet Explorer 中的剪贴板获取 Base64 编码的图像?

    我搜索了很多 但没有找到从剪贴板获取 Base64 编码数据 我可以捕获粘贴事件 然后将事件分配给变量 clipBoard e clipboardData e clipboardData window clipboardData 镀铬 我可
  • 为什么从 int 到 Long 的隐式转换不可能?

    我无法隐式将 int 转换为 long 并将 long 转换为 Long 为什么不能将 int 隐式转换为 Long 为什么Java不能在示例的最后一行进行隐式转换 int i 10 OK long primitiveLong i OK L
  • C++14 中的 C++17 折叠表达式有什么好的替代方案吗?

    这是 C 17 中基于 lambda 的漂亮 简洁的折叠表达式 include
  • 为一个字体系列中的每种字体分配不同的字体大小

    我正在用英语以外的语言制作网页 所以文本中包含了英语和其他语言的混合 我分配了 font family 就像 p font family EnglishFont NonEnglishFont font size 14px 它工作正常 但字体
  • C 中 int、char 和 EOF 的混淆

    我正在学习 K R 的经典 C 编程书籍第二版 这是第 17 页的示例 include
  • 使用许可证文件保护 DLL 文件 [关闭]

    Closed 这个问题需要多问focused 目前不接受答案 使用许可证文件保护 DLL 的使用 加载的最佳方法是什么 您可能需要考虑以下几件事 检查 DLL 的总和 用一个加密哈希函数 您可以将其存储在许可证文件或 DLL 中 这提供了一
  • Android - 保存/恢复片段状态

    我有一个活动 其中我浏览了几个片段 在每个片段中我都有几个视图 EditText ListView Map etc 如何保存当时显示的片段实例 我需要它在活动时工作onPause gt onResume 当我从另一个片段返回时 从后台弹出