onSaveInstanceState中保存接口(Listener)

2024-01-25

保存实例状态

对于像 Integer、Long、String 等数据都可以,我只是将其放入包中,并在再次调用 onCreateView 时将其取回。但我的片段也有像下面这样的听众,

public class SomeFragment extends Fragment {
    public interface SomeListener {
        public void onStartDoingSomething(Object whatItIsDoing, Date when);
        public void onDoneDoingTheThing(Object whatItDid, boolean result);
    }

    private SomeFragmentListener listener;
    private String[] args;

    public static SomeFragment getInstance(SomeListener _listener, String... _args) {
        SomeFragment sf = new SomeFragment();
        sf.listener = _listener
        sf.args = _args

        return sf;
    }

    // rest of the class

    // the example of where do I invoke the listener are
    // - onSetVisibilityHint
    // - When AsyncTask is done
    // - successfully download JSON
    // etc.
} 

我怎样才能捆绑监听器以便稍后可以取回它?


我最近刚刚找到了执行此操作的正确方法,我想与该主题的未来读者分享。

保存片段侦听器的正确方法不是保存它,而是在片段附加到活动时从活动请求。

public class TheFragment extends Fragment {
    private TheFragmentListener listener;

    @Override
    public void onAttach(Context context) {
        if (context instanceof TheFragmentContainer) {
            listener = ((TheFragmentContainer) context).onRequestListener();
        }
    }

    public void theMethod() {
        // do some task
        if (listener != null) {
            listener.onSomethingHappen();
        }
    }

    public interface TheFragmentContainer {
        public TheFragmentListener onRequestListener();
    }

    public interface TheFragmentListener {
        public void onSomethingHappen();
    }
}
  • 当片段附加到活动时,我们检查活动是否实现 TheFragmentContainer
  • 如果活动这样做,则从活动请求侦听器。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

onSaveInstanceState中保存接口(Listener) 的相关文章

  • 如何获取之前的碎片?

    为了在我的应用程序中重用某些片段 我需要知道哪个片段是返回堆栈上的第二个片段 为了做到这一点 我正在使用getFragmentManager getFragments 显示以下错误 但有效 FragmentManager getFragme
  • Android 在打开应用程序时会广播吗?

    例如 如果我想知道Youtube何时打开 是否有与之相关的广播 我当然知道我可以轮询 logcat 消息来检查活动 但我可以通过广播来做到这一点吗 因为它会少得多的耗电 此链接似乎表明这是不可能的 如何跟踪 Android 中的应用程序使用
  • Twitter 登录说明

    我想在 Android 中创建一个 Twitter 应用程序 为此 我想创建一个登录页面并登录到 Twitter 为此 我们需要消费者密钥和消费者密钥 这是什么意思 要创建此登录页面 除了 Twitter 帐户之外 我们还需要其他任何东西吗
  • 通过 WhatsApp 发送消息

    由于我发现了一些较旧的帖子 表明 Whatsapp 不支持此功能 我想知道是否发生了变化 以及是否有办法打开与我通过意图发送的号码进行 Whatsapp 聊天 UPDATE请参阅https faq whatsapp com en andro
  • Service 和 IntentService,运行从服务器轮询数据库值的服务哪个更好?

    我读过很多关于Service and IntentService 然而 当做出决定时 我没有足够的信心选择使用哪种类型来创建一个后台服务 该服务将在一定时间间隔内从数据库轮询数据 并在获得所需数据时停止它 因为数据代表请求的状态 例如 订购
  • 带操作按钮的颤动本地通知

    我在我的 flutter 项目中尝试了 flutter 本地通知插件 它在简单通知上工作正常 但我需要带有操作按钮的通知功能 请帮助我或建议我实现此功能 不幸的是 flutter local notifications 插件尚不支持操作按钮
  • Android在排序列表时忽略大小写

    我有一个名为路径的列表 我目前正在使用以下代码对字符串进行排序 java util Collections sort path 这工作正常 它对我的 列表进行排序 但是它以不同的方式处理第一个字母的情况 即它用大写字母对列表进行排序 然后用
  • Android 自定义布局 - onDraw() 永远不会被调用

    public class MainActivity extends Activity Override public void onCreate Bundle savedInstanceState super onCreate savedI
  • 如何在android中设置权限WRITE_SECURE_SETTINGS? [复制]

    这个问题在这里已经有答案了 我正在尝试启用 4 0 以上的辅助功能服务设置 但它显示异常 即 引起原因 java lang SecurityException 权限拒绝 写入安全设置需要 android permission WRITE S
  • glTexImage2D: 之前出错:( 0x506 内部 0x1908 格式 0x1908 类型 0x1401

    当使用 Android Studio 运行模拟器时 我在模拟器屏幕上看不到任何内容 一切都是黑色的 我得到以下事件日志 模拟器 glTexImage2D 出错了 0x506 内部 0x1908 格式 0x1908 类型 0x1401 我已经
  • Android 应用程序中的 Eszett (ß)

    我的 res layout activity 文件中的德语 字符在我的应用程序中自动转换为 ss 即使我将语言和键盘设置为德语 它仍然不会显示 Android 中可以显示 吗 edit
  • 如何检查 Android 中连接的 wifi 网络是否处于活动状态

    如何自动检查android中连接的WiFi网络上的互联网是否处于活动状态 我可以检查 wifi 是否已启用或 wifi 网络是否已连接 但我不确定如何检查互联网是否已连接 这可能吗 private boolean connectionAva
  • 使用 PhoneGap 使 Android 应用程序易于访问(对于残障人士)

    有人有过使用 PhoneGap 使 Android 应用程序可访问的经验吗 至少我们需要使我们的应用程序符合第 508 条规定 我尝试实现一些标准的辅助功能 文本框标签 向 div 添加标题属性等 但是 当在 Android 中使用 Tal
  • 如何修改 Skobbler 注释而不重新添加它

    我必须修改 SKAnnotation 的图像 注释生成器代码 private SKAnnotation getAnnotationFromView int id int minZoomLvl View view SKAnnotation a
  • 按钮 - 单击时更改背景颜色

    我的活动中有 8 个按钮 我正在寻找的是 按钮具有默认背景 单击按钮时 背景颜色应更改为其他颜色 这部分非常简单 但是 当我单击任何其他按钮时 第一个按钮的背景颜色应该变回默认颜色 我知道这将使用 选择器状态 来完成 但我不太确定如何实现它
  • 模块中的类无法加载

    我正在开发一个 2D Unity android 游戏 其中我最近添加了 Firebase Beta SDK 但添加后FirebaseAnalytics unitypackage我面临的错误是 无法加载模块中的类 当我删除文件夹时Fireb
  • Android 中循环事件的星期几和时间选择器

    我想创建一个控件 允许用户在我的 Android 活动中选择一周中的某一天 星期一 和一天中的某个时间 下午 1 00 找不到任何关于此的好帖子 好吧 我想我已经明白了 我只是不喜欢这个解决方案 因为我在一周中的某一天使用的微调器与时间选择
  • 如何在基本活动中使用 ViewBinding 的抽象?

    我正在创建一个基类 以便子级的所有绑定都将设置在基类中 我已经做到了这一点 abstract class BaseActivity2 b AppCompatActivity private var viewBinding B null pr
  • 尝试将 SQLite DB 从数据复制到 SD 卡

    我正在使用以下代码 该代码发布在 Stack Overflow 上的某个位置 并根据我的目的进行了修改 try File sd Environment getExternalStorageDirectory File data Enviro
  • Android 材料芯片组件崩溃应用程序。无法膨胀 xml

    Tried Chip来自两个支持库的组件 com google android support design 28 0 0 rc01和材料 com google android material material 1 0 0 rc01 堆栈

随机推荐

  • 使用java泛型确保接收到的参数与其类或其子类型相同

    我有一个新手问题 interface Animal void partner Animal other class Lion implements Animal int areaUnderControl Override public vo
  • 如何让.NET Windows服务在安装后立即启动?

    除了 service StartType ServiceStartMode Automatic 我的服务在安装后不会启动 Solution 将此代码插入我的 ProjectInstaller protected override void
  • 在 Dockerfile 中使用 SSH 进行 Git 克隆

    我正在尝试在 docker 映像中使用 ssh 克隆 git 存储库 并且我想在构建 dockerfile 时执行此操作 我可以使用 git clone https 以及用户名和密码来完成这项工作 但使用 ssh 会失败 我的 docker
  • .htaccess 路由 PHP

    我正在尝试在 htaccess 中为 PHP 编写一些简单的路由 我的文件现在看起来像这样 RewriteEngine On RewriteBase webservices RewriteCond REQUEST FILENAME f Re
  • 如何在 Visual Studio 中正确设置 exe 的入口点?

    我已将入口点设置为 WinMain 但是当我运行该应用程序时 它启动但不显示 然后我必须使用任务管理器将其关闭 这是 WinMain 之前的代码 include
  • 为什么 chrome 会突出显示未在样式中列出或计算的边距

    样式 下没有显示边距样式 并且如您所见 它也没有显示任何正在计算的内容 不知道这里发生了什么 但在将元素的宽度更改为 90 后我注意到了这一点 我正在使用粉底 所以也许它有一些竞争风格 我不是问如何解决我的具体问题 这就是为什么我没有发布代
  • Windows DLL实际上是如何共享的?

    通过检查 Windows 计算机中的几个 DLL 例如 KERNEL32 DLL 我注意到它们的任何部分 甚至只读数据部分 都没有设置 IMAGE SCN MEM SHARED 标志 DLL 是从 dll 文件映射的 因此只有当您读取文件的
  • C++ 变量作用域

    与我的预期相比 我的 C 代码输出不同 我希望了解它是如何执行的 include
  • 如何使用角度2中的管道过滤列表

    你能告诉我如何使用 Angular 2 中的管道来过滤列表吗 https stackblitz com edit angular qvtqeu file src 2Fapp 2Fapp component html https stackb
  • 如何找到2个以上用户的匹配时间间隔

    从给定的不同用户的时间间隔中找到最合适的时间 Rows 5 fid userid FromDateTime ToDateTime flag 62 1 2012 07 18 01 48 20 2012 07 18 02 55 20 1 63
  • SQL 查询不会仅返回一个字段的完整结果

    我在使用 VBA 执行 SQL 查询并将结果复制到 Excel 工作表中时遇到问题 当 sub 执行时 它仅复制 256 倍数的行 因此第 256 512 768 等行是唯一填充到 Excel 中的行 我从数据库复制任何其他字段都没有问题
  • Java 中的延续

    Java 中有没有好的延续性实现 如果是这样 开销是多少 JVM 的设计并没有考虑到这些事情 对吗 那么这种做法是不是有悖常理呢 请参阅 Apache Javaflowhttp commons apache org sandbox java
  • 我可以使用自动映射器将多个对象映射到目标对象吗

    UserAccount objUserAccount null AutoMapper Mapper CreateMap
  • 如何设置 PHP_AUTH_USER

    PHP AUTH USER 为空 并且系统使用Windows登录凭据 我该如何改变它 我想使用用户输入的用户名和密码 See 使用 PHP 进行 HTTP 身份验证 http php net manual en features http
  • 如果实体中没有定义标识符,Hibernate 如何在内部跟踪对象?

    根据 Hibernate 参考文档 标识符属性是严格可选的 你可以把它们放下 并让 Hibernate 在内部跟踪对象标识符 如果实体中没有定义标识符 Hibernate 如何在内部跟踪对象 进一步扩展问题 如果没有标识符 我们如何 loa
  • eval() 可以优化吗?

    eval 更改局部变量的能力给 JavaScript 优化器带来了很大的问题 我读了 javascript权威指南 这本书 eval 可以优化吗 我不明白 这并不是说eval优化 而是那些寻求优化的 JavaScript 引擎被阻止这样做e
  • 对向量的每个元素中的单词重新排序

    我想更改向量中每个元素的词序 具体来说 我想制作另一个向量 其中第一个单词现在是许多长度不同的元素的最后一个单词 Data metadata1 lt c reference1 an organism reference2 another o
  • 如何填写数据安全? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我正在为我的应用填写 Google Play 数据安全表单 我的应用程序使用 AdMob 并且没有其他收集用户信息的库 我该怎么填写呢 对
  • 双击 .jar 文件时“找不到主类”

    首先 我意识到这个问题应该很简单 而且很多人似乎都经历过 但是 看来我的问题可能是slightly与现有职位不同 我正在使用 NetBeans 编译 Java 应用程序 构建完成后 输出将正确进入 dist 文件夹 jar 文件就在那里 如
  • onSaveInstanceState中保存接口(Listener)

    保存实例状态 对于像 Integer Long String 等数据都可以 我只是将其放入包中 并在再次调用 onCreateView 时将其取回 但我的片段也有像下面这样的听众 public class SomeFragment exte