我在我的一些片段中使用了我的主要活动中的对象,其中一个是SpeechHelper,它在我的MainActivity中定义并用于所有片段。
我知道在我的片段中使用这个对象的两种方法:
- 第一个是将它传递给它的构造函数中的Fragment。
- 第二个是这样做:
((MainActivity) getActivity()).speechHelper.speak(getString(R.string.flashlight),TextToSpeech.QUEUE_FLUSH);
我不确定这种方法是如何工作的,早在MainActivity生命周期中它就会崩溃我的应用程序。
我想知道有什么方法可以做到这一点,以及从我的片段中的MainActivity(FragmentActivity)访问对象的首选方法。
答案 0 :(得分:0)
第一种是首选方法。如果需要,同样接受的是通过调用后构造函数传递它。上面使用的方法仅在speechHelper为public,或者受保护且片段位于同一个包中时才有效。直接访问变量通常是一个坏主意,因为它违反了关注点的分离,如果你重构,可能会导致各种次要问题。
答案 1 :(得分:0)
我使用的许多地方都有主要活动实现一个监听器接口。绑定到片段的绑定,并在您的活动中使用公共方法,使用该侦听器实例在主要活动中运行代码。