请勿使用getActivity().getSystemService
,因为片段可能无法始终附加到活动。 而是将您在onCreateView()中获得的充气机对象存储到实例变量中。
private LayoutInflator inflator =nulll;
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
this.inflator= inflator;
View myFragmentView = inflater.inflate(R.layout.your_fragment_layout, container,false);
return myFragmentView;
}
public void yourMethodWhereYouNeedInflator()
{
if(this.inflator!=null)
{
View myView = inflater.inflate(R.layout.my_layout);
}
}
使用的是不建议的原因有很多上下文通过getActivity()
获得父活动。它有可能导致内存泄漏,因为您要膨胀的任何View都会保存对该活动的引用。附在任何此类视图上的任何drawable也将参照该活动。如果您碰巧将这种绘图存储在全局集合中,您很快会遇到沉重的内存泄漏。您可以使用getActivity().getApplicationContext();
,但如果在android运行时调用onAttach()之前调用getActivity()
,则它将返回null。但是onCreateView()
保证称为beforeonAttach()。因此,更好的解决方案是将您在onCreateView()
获得的充气器存储到实例变量中;
使用getActivity()代替上下文。 – 2014-09-29 09:12:03
因为显而易见的答案在所有情况下都可能无法正常投票。 – 2014-09-29 09:49:32