9

android 开发者教程推荐我使用片段的宿主活动来传递数据等等,那么为什么会有一个设置/获取目标片段方法呢?

到目前为止,我的应用程序包含一个主机活动和一个片段,其中有一个启动 a 的按钮,DialogFragment其中有一个启动 ANOTHER 的按钮DialogFragment。但是,使用setTargetFragment/getTargetFragment使整个考验变得有些混乱,因此我正在考虑重新实现以让我的主要活动DialogFragment.show通过我的主要片段的自定义界面处理方法。

这是正确的思维方式吗?或者使用没有坏处setTargetFragment?谁能提供使用它的好坏例子?

4

2 回答 2

6

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

想象一下,您有某种确认片段,您可以MainFragment这样添加:

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

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

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

这很简单,但是如果你旋转屏幕并且由于某种原因ConfirmationFragment被添加到FragmentManagerbeforeMainFragment中,会抛出异常,说明在片段管理器中找不到目标片段

于 2014-06-12T02:50:40.970 回答
4

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

如果过多地使用它们,你最终会得到你所看到的——难以理解和维护的令人困惑的代码。首先,通过您的活动编组所有内容,您可以维护一个易于遵循和维护的“扁平”层次结构。

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

于 2013-09-22T16:30:20.807 回答