在片段getActivity()与mActivity reference中显示toast

时间:2018-05-29 06:17:11

标签: android android-context

在我的片段中调用方法getActivity()一次,并且每次我想要显示toast消息时,比在调用getActivity()时更好地保存mActivity中的引用?

Toast.makeText(mActivity, text, duration).show();

VS

Toast.makeText(getActivity(), text, duration).show();

4 个答案:

答案 0 :(得分:3)

出于以下原因,

getActivity()应该是首选:
1)内存泄漏预防
变量mActivity位于周围会为内存泄漏提供机会,例如:错误地将变量设置为静态,可以方便地在某些匿名AysncTask

中引用该活动

2)纠正片段 - 活动关系的性质
碎片可以在很多时候附着或分离。因此,获取托管当前片段的活动的参考应该是按需。拥有mActivity变量意味着您需要正确设置和取消设置。

请注意,此处Toast所需的内容是Context对象,因此不一定是此处所需的活动。应用程序上下文对象也足够了

答案 1 :(得分:1)

碎片两者都是相同的

第一个

活动活力 = getActivity();

@Override
public void onClick(View arg0) {

Toast.makeText(**mActivity**,"Text!",Toast.LENGTH_SHORT).show();

}

第二个

像这样直接使用

    Toast.makeText(getActivity(),"Text!",Toast.LENGTH_SHORT).show();

答案 2 :(得分:0)

如果您只需要一个上下文或活动,没有区别。但是如果要访问父活动中的某些方法或字段,最好将参考保存在mActivity中。

答案 3 :(得分:0)

如果您希望上下文仅显示Toast消息,并且您很难获得对Activity的引用,那么您可以使用getApplicationContext()代替。