首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

既然setTargetFragment()已被弃用,如何替换它

setTargetFragment()方法在Android的Fragment API中已被弃用,主要是因为它可能导致内存泄漏和难以追踪的生命周期问题。取而代之的是使用FragmentResultListener来在Fragment之间进行通信。

基础概念

FragmentResultListener是Android Jetpack中的一个组件,用于在Fragment之间传递结果。这种方式更加安全和可靠,因为它避免了直接引用目标Fragment,从而减少了内存泄漏的风险。

优势

  1. 避免内存泄漏:不再需要持有目标Fragment的引用。
  2. 生命周期安全FragmentResultListener会在适当的生命周期回调中进行注册和注销。
  3. 简化代码:使用更简洁的API进行Fragment间通信。

类型

FragmentResultListener是一个接口,你需要实现它的onFragmentResult()方法来处理传递的结果。

应用场景

当你需要在两个Fragment之间传递数据时,可以使用FragmentResultListener。例如,一个Fragment需要从另一个Fragment获取数据。

示例代码

以下是如何使用FragmentResultListener来替换setTargetFragment()的示例:

发送结果的Fragment

代码语言:txt
复制
public class SenderFragment extends Fragment {
    private static final String REQUEST_KEY = "requestKey";

    @Override
    public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);

        // 设置结果监听器
        requireActivity().getSupportFragmentManager().setFragmentResultListener(
            REQUEST_KEY,
            this,
            new FragmentResultListener() {
                @Override
                public void onFragmentResult(@NonNull String requestKey, @NonNull Bundle result) {
                    // 处理接收到的结果
                    String data = result.getString("data");
                    // 更新UI或其他操作
                }
            }
        );

        // 发送结果到目标Fragment
        Bundle bundle = new Bundle();
        bundle.putString("data", "Hello from SenderFragment");
        requireActivity().getSupportFragmentManager().setFragmentResult(REQUEST_KEY, bundle);
    }
}

接收结果的Fragment

代码语言:txt
复制
public class ReceiverFragment extends Fragment {
    private static final String REQUEST_KEY = "requestKey";

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

        // 注册结果监听器
        requireActivity().getSupportFragmentManager().setFragmentResultListener(
            REQUEST_KEY,
            this,
            new FragmentResultListener() {
                @Override
                public void onFragmentResult(@NonNull String requestKey, @NonNull Bundle result) {
                    // 处理接收到的结果
                    String data = result.getString("data");
                    // 更新UI或其他操作
                }
            }
        );
    }
}

参考链接

Fragment Result API

通过这种方式,你可以安全地在Fragment之间传递数据,同时避免了许多潜在的问题。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

如何向前一个Fragment回传信息?

前言 我们使用Activity的时候,可以通过startActivityForResult来启动一个新的Activity,然后在新的Activity中可以setResult来向前一个Activity...我们知道可以使用setArguments向后面的Fragment传递信息,但是如何回传结果信息?...setTargetFragment Android提供了一种方式setTargetFragment public void setTargetFragment(Fragment fragment, int...getTargetFragment().onActivityResult(getTargetRequestCode(), resultCode, intentData); 这样前一个Fragment就可以在的...上面可以发现其实就是将前一个Fragment对象交给后面的Fragment持有而已,我们自己创建一个set函数其实也可以实现,但是还是推荐使用Android提供的setTargetFragment,来看看的源码

28220
  • ElasticSearch5.0之后的改变

    [ "_doc" ] } fields参数被stroed_fields取代了,stroed_fields只返回存储的数值,而不是从_source中获取数据 fielddata_fields已被...删除对查询中顶级filter元素的支持function_score,替换为query。 在collect_payloads该参数span_near查询已被。有效负载将在需要时加载。...在score_mode对参数has_parent 已经被,取而代之的的score布尔参数。此外, total分数模式已被移除,有利于该sum模式。...geo_distance_range查询已被,应由geo_distance桶聚合或geo_distance排序替换。...对于geo_distance查询,聚集和排序sloppy_arc的选项distance_type参数已被 顶级filter参数删除 删除filter了对搜索api中的最高级别的支持,替换为post_filter

    98420

    text-wrap:nowrap代码已经被用了,为什么部分浏览器还能生效?

    哎呀,谈到text-wrap:nowrap,我就想起了它被的原因。说实话,这个属性真是让人头疼啊!你说吧既然决定用了是不是就应该无效呢?...尽管 `text-wrap: nowrap;` 已经被,但部分浏览器可能仍然支持,原因是为了向后兼容性:为了确保旧版本的网页在新版本的浏览器中仍然能够正常显示,浏览器通常会保留对旧属性的支持。...要禁止文本换行,您可以使用以下 CSS 代码: class类名{   white-space: nowrap; } 只需要将text-wrap: nowrap;替换成white-space: nowrap...但官方的建议是尽量避免使用已被废弃的属性,而是采用新的解决方案来实现相同的效果。这样能够保证网页的兼容性和未来的可维护性。

    45010

    text-wrap:nowrap代码已经被用了,为什么部分浏览器还能生效?

    哎呀,谈到text-wrap:nowrap,我就想起了它被的原因。说实话,这个属性真是让人头疼啊!你说吧既然决定用了是不是就应该无效呢?...尽管 `text-wrap: nowrap;` 已经被,但部分浏览器可能仍然支持,原因是为了向后兼容性:为了确保旧版本的网页在新版本的浏览器中仍然能够正常显示,浏览器通常会保留对旧属性的支持。...要禁止文本换行,您可以使用以下 CSS 代码:class类名{ white-space: nowrap;}只需要将text-wrap: nowrap;替换成white-space: nowrap;...但官方的建议是尽量避免使用已被废弃的属性,而是采用新的解决方案来实现相同的效果。这样能够保证网页的兼容性和未来的可维护性。

    45720

    Kubernetes 1.26 中的删除、和主要更改

    25 张图详解 K8S 管理平台 Rancher 部署实践 变化是 Kubernetes 生命周期不可或缺的一部分:随着 Kubernetes 的成长和成熟,功能可能会被、删除或替换为项目健康的改进...已的 API 已被标记为在未来的 Kubernetes 版本中删除;它将继续运行直到被删除(从起至少一年),但使用会导致显示警告。...已删除的 API 在当前版本中不再可用,此时您必须迁移到使用替换 API。 一般可用 (GA) 或稳定的 API 版本可能会标记为已,但不得在 Kubernetes 的主要版本中删除。.../products/containers-kubernetes/kubectl-auth-changes-in-gke 删除kube-proxy的 userspace 模式 userspace代理模式已被一年多...https://github.com/kubernetes/kubernetes/pull/112120 这些命令行参数已被

    1.8K30

    解决sklearncross_validation.py:41: DeprecationWarning: This module was deprecated

    这个警告信息表明使用到的模块在0.18版本中已被。在本文中,我将分享如何解决这个警告信息的问题。...然而,由于不断发展的版本更新,一些旧版本的模块和函数会被,导致警告信息的出现。解决方案要解决这个警告信息,我们需要对代码进行相应的修改。...命令来更新scikit-learn到最新版本:plaintextCopy codepip install -U scikit-learn这将会升级scikit-learn到最新版本,并解决很多已知的问题和警告...总结起来,解决scikit-learn中警告信息的方法可以概括为:导入正确的模块和修改函数调用,以及考虑更新scikit-learn版本。...然而,自scikit-learn version 0.18起,这个模块已被,并被sklearn.model_selection所取代。

    30730

    PodSecurityPolicy:过去、现在和未来

    我们将从 Kubernetes 如何删除特性的概述开始。 在 Kubernetes 中,用是什么意思? 每当 Kubernetes 特性要消失时,我们策略[1]就是我们的指南。...首先,该特性被标记为已,然后经过足够的时间,它最终可以被删除。 Kubernetes 1.21 启动 PodSecurityPolicy 的用过程。...PSP 替换策略始于这样一种认识:既然已经有了一个强大的外部准入控制器生态系统,那么 PSP 的替换并不需要对所有人都适用。...PSP 替换策略设计得尽可能简单,同时提供足够的灵活性,在大规模生产中真正有用。具有软推出特性,可以将其改造为现有集群,并且具有足够的可配置性,最终可以在默认情况下激活。...当这种情况发生时,Kubernetes 策略会确保你有足够的时间来计划下一步行动。对于 PodSecurityPolicy,有几个选项可以满足各种需求和例。

    1.4K20

    解决TypeError: read_excel() got an unexpected keyword argument ‘parse_cols or ‘she

    这些错误消息通常是由于​​pandas​​版本更新导致的,某些参数已被或更改。...删除​​parse_cols​​参数​​parse_cols​​参数已经被,应该使用​​usecols​​参数来代替。...删除​​sheetname​​参数​​sheetname​​参数已经被,应该使用​​sheet_name​​参数来代替。...首先检查​​pandas​​的版本,如果不是最新的版本就升级,然后检查代码中使用了被参数的地方,将它们替换为新的参数名。 通过以上步骤,我们可以成功解决这个错误,继续正常地处理Excel文件。...提供了高性能、易于使用的数据结构和数据分析工具,使得数据清洗、转换、操作和分析变得更加简单和高效。

    1K50

    MySQL8.1.0 发布说明-废弃与移除功能

    在将来的MySQL版本中,预计会删除此变量;在此之前,应用程序应该进行重写,不要依赖。 复制:binlog_format以及相关变量及函数被废弃,未来版本。...mysql_native_password身份验证插件现在已被,并可能在未来的MySQL版本中移除。...现在,传统过滤模式已被。对于传统审计日志过滤系统变量,现在会发出新的警告。这些的变量可以是只读或动态的。相关操作会在错误日志写入告警。...keyring_file和keyring_encrypted_file插件现已被。...现在,这个特性已被,并可能在将来的MySQL版本中被移除。相关的MYSQL_OPT_RECONNECT选项仍然可用,但也已被

    53930

    警告:有用的警告|让Kubernetes的使用越来越容易

    一种重要的改变是API的。随着Kubernetes中的API升级到GA版本,预发布的API版本将被并最终被删除。 即使有一个延长的期,并且在发布说明中包含了,它们仍然很难跟踪。...在期间,预发布API仍然有效,允许多个版本转换为稳定的API版本。然而,我们发现,用户通常甚至没有意识到他们所依赖的API版本已经,直到他们升级到不再提供的版本。...从v1.19开始,每当向的REST API发出请求时,都会在API响应的同时返回一个警告。此警告包括有关API将不再可用的版本的详细信息,以及替换的API版本。...这有助于受影响的人知道他们发出的请求已被,他们需要多长时间来解决这个问题,以及他们应该使用什么API来替代。...Custom Resource Definitions 从v1.19开始,除了API服务器警告已API的功能外,CustomResourceDefinition还可以指示它所定义的资源的特定版本已被

    1.9K30
    领券