[英]Display toast in fragment getActivity() vs mActivity reference
在我的片段中一次调用方法getActivity()并将引用保存到mActivity中是否比每次我想显示祝酒消息时调用getActivity()更好?
Toast.makeText(mActivity, text, duration).show();
与
Toast.makeText(getActivity(), text, duration).show();
首选getActivity()
有两个原因:
1)防止内存泄漏
拥有一个变量mActivity
增加内存泄漏的机会,例如错误地将该变量设置为static ,这使得在某些运行中的匿名AysncTask
引用该活动变得容易且方便。
2)片段活动关系的正确性质
片段可以在很多时候连接或分离。 因此,越来越托管当前片段活动的参考应该是在按需的基础 。 拥有mActivity
变量意味着您需要正确设置和取消设置它。
请注意, Toast
在这里需要的是一个Context
对象,因此在这里并不一定是必需的活动。 应用程序上下文对象也足够
明智的片段都是相同的
第一
活动mActivity = getActivity();
@Override
public void onClick(View arg0) {
Toast.makeText(**mActivity**,"Text!",Toast.LENGTH_SHORT).show();
}
第二个
像这样直接使用
Toast.makeText(getActivity(),"Text!",Toast.LENGTH_SHORT).show();
如果您只需要上下文或活动,则没有区别。 但是,如果要访问父活动中的某些方法或字段,则最好将引用保存在mActivity中。
如果您只想让上下文显示Toast
消息并且很难获得对Activity的引用,则可以使用getApplicationContext()
代替。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.