当前位置: 首页 > 知识库问答 >
问题:

我们应该使用setTargetFragment()吗?我认为碎片不应该互相交流

范凡
2023-03-14

Android开发人员教程建议我使用片段的主机活动来传递数据等等,那么为什么会有一个设置/获取目标片段的方法呢?

到目前为止,我的应用程序包含一个宿主活动和一个片段,其中有一个按钮可以启动一个对话片段,其中有一个按钮可以启动另一个对话片段。使用setTargetFrament/getTargetFrament让整个磨难有些混乱,所以我正在考虑重新实现,让我的主要活动通过我的主要片段的自定义界面处理DialogFragment.show方法

这是正确的思维方式吗?还是使用设置目标碎片没有害处?任何人都可以提供使用它的好例子和坏例子吗?

共有2个答案

仰城
2023-03-14

我不认为使用 setTarget 碎片有隐含的危害,但是,我只会在非常特定的情况下使用它。例如,如果目标片段只被片段使用(考虑到对象重用,并在可能的情况下将类设计为可重用),即使这样,也要谨慎使用。

过多地使用它们,你最终会看到混乱的代码,难以理解和维护。从一开始,通过整理活动中的一切,你就保持了一个易于遵循和维护的“扁平”层次结构。

我认为是否使用setTargetFragment的决定是一种编码风格/哲学,凭借智慧和经验,它“感觉”对或错。也许在你的情况下,有证据表明你正在质疑你的旧代码,你正在获得这种智慧:)

阎庆
2023-03-14

此外,您可能会在片段管理器中找不到目标片段。如果在旋转(或其他配置更改)之后,在添加调用程序片段时,您的目标片段不会被读取到片段管理器,则会发生这种情况。

假设您有某种从MainFragment添加的确认片段:

ConfirmationFragment frag = new ConfirmationFragment();
frag.setTargetFragment(this, 0);
getFragmentManager().beginFragmentTransaction().add(R.id.container, frag).commit(); 

现在在某个确认按钮上,单击您通过调用从MainFrament调用方法:

((MainFragment)this.getTargetFragment()).onUserSelectedGoodButton();

这很漂亮也很简单,但是如果你要转屏,并且由于某种原因ConfirmationFrament将被添加到FragmentManager之前的MainFrament,将引发异常,说明在片段管理器中找不到目标片段

 类似资料:
  • 哈希集由哈希映射支持。从它的JavaDoc: 这个类实现了Set接口,由哈希表(实际上是一个HashMap实例)支持 在查看源时,我们还可以看到它们之间的关系: 因此,一个<code>哈希集 使用而不是,不是更有效吗?进一步考虑的是,如果环境允许使用而不是,我们是否应该完全放弃,直接使用。 触发这些想法的基本问题是以下情况:我有一组具有以下属性的对象: 大型对象集合 如何有效地检查集装箱? 我想到

  • 我有一个大型Android游戏,其中每个逻辑屏幕都有一个活动。(启动画面、开始画面、关卡选择器、游戏画面和设置是不同的活动)。现在一切正常。 如果我重写所有内容,使得只有一个活动,逻辑屏幕是碎片,会减少RAM或CPU消耗吗?

  • 问题内容: 我们的网站目前正在使用jQuery库,每月的访问量约为100万。我们希望包括以API为中心的方法,因此决定转向Javascript MVC并为此选择了angularJS。 现在我的问题是,我应该在Angular顶部使用jQuery,以便我需要重写最少的DOM操作代码,还是应该以Angular方式重写所有内容?我们使用的是jQuery插件,例如plupload,jQuery UI。等在网

  • 问题内容: 我正在为电子商务应用程序设计数据库/域,但很难弄清楚如何存储产品。 该网站将出售各种各样的产品,笔,丁字裤,纹身,雨伞等等。这些产品中的每一个将共享一些共同的属性,例如高度,宽度,长度,重量等,但是某些产品具有特殊的数据。例如,钢笔具有不同的墨水颜色,笔尖/笔盖和小册子可以具有不同类型的折痕。到目前为止,我已经考虑了20多个额外的属性,但是这些属性可能仅适用于网站上1%的产品。 因此,

  • 问题内容: 我一直在研究PDO 。我知道用PDO准备我的SQL语句可以防止发生SQL注入。 代码示例: 通过将ID绑定为数字,并且Title是字符串,我们可以限制当有人尝试在代码中进行SQL注入时所造成的损害。 我们是否应该始终将值与a绑定,以便可以限制在SQL注入中可以从数据库中提取的内容?这样在执行PDO时会增加PDO的安全性吗? 问题答案: 一个有两个问题。重要的是不要混淆它们 我们是否应该

  • 问题内容: 在编写自己的类时,是否总是有必要重写? 如果我不这样做,它将自动检查所有字段是否相同?还是只是检查两个变量是否指向同一个对象? 问题答案: 如果正在编写将要以某种方式比较其对象的类,则应重写和方法。 不提供显式方法将导致从超类继承该方法的行为,并且在超类为类的情况下,它将成为Java API规范中针对该类设定的行为。 提供方法的一般约定可以在该类的文档中找到,特别是and 方法的文档。