这是初始化接口的最佳方法。 (活动-Frament)?

时间:2015-05-23 10:32:47

标签: android android-fragments android-activity

我是Android编程世界的新手,这是我的问题。

假设我有一个名为A的活动和一个名为F的碎片。我知道ActivityFragment之间的互动应该通过Interface完成。我过去常常在Interface的{​​{1}}中设置onAttach()

Fragment

现在听说here来自@Override public void onAttach(Activity activity) { super.onAttach(activity); mListener = (MyListenerInterface) activity; } 。 我的问题是:这是init的最佳方法。听众? Static Factory Method方法或通过静态工厂方法初始化监听器,像这样?

onAttach()

我认为,最好通过public static MyFragment newInstance(MyListenerInterface mListener) { MyFragment f = new MyFragment(); this.mListener = mListener; ........... return f; } 初始化侦听器而不是从活动中转换,因此我们可以避免空指针异常。

2 个答案:

答案 0 :(得分:1)

是的,您不需要通过工厂投放任何内容,但我认为onAttach更好,因为您泄漏活动上下文的机会较少。让我们假设您使用工厂创建一个实例并且从不使用该片段,它将泄漏Activity的上下文,并且其中包含所有内容。另外,请不要忘记销毁onDetach中的界面。

此外,您可以拥有该片段的许多实例,并且使用选项1,它们都将具有相同的侦听器,而不是很好。

此外,你应该制作一个你可以称之为BaseActivity的东西,一个所有其他扩展的抽象活动,并在那里定义接口方法,你将避免总是转向很多不同的类。如果您需要在应用的每个活动中快速更改某些内容,这也会派上用场。

答案 1 :(得分:1)

第一个选项(在OnAttach()中初始化侦听器)是一个更好的选项,因为

  • 在第一个选项中,MyListenerInterface是一个非静态变量,因此每个片段都有自己的监听器。
  • 而第二个选项的MyListenerInterface变量是一个静态的,它是在类级保持的引用,并且对于所有其他的片段实例都是通用的,这会导致在不同的活动中需要相同的片段时出现问题一项活动的听众将被另一项活动所覆盖。