我试图从OnCreateView方法中获取片段的LayoutInflater,我有这个方法用于活动
inflater = (LayoutInflater) activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
但是我需要一个人才。我找到了一些解决方案,如:
LayoutInflater inflater = LayoutInflater.from(context);
但我如何定义或提供上下文。
答案 0 :(得分:4)
使用getActivity()代替context:
LayoutInflater inflater = LayoutInflater.from(getActivity());
getActivity():,表示片段中的当前活动参考。
答案 1 :(得分:1)
我如何定义或提供上下文。
使用getActivity()
获取托管片段的活动的上下文。
public final Activity getActivity()在API级别11中添加
返回此片段当前与之关联的活动。
答案 2 :(得分:1)
使用它:
inflater = (LayoutInflater) getActivity().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
答案 3 :(得分:0)
在片段的OnCreate中定义上下文而不是OnCreateView方法在创建片段时它只调用一次。
public class MyFragment extends Fragment {
Context mContext;
View view;
LayoutInflater inflaters;
@Override
public void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
mContext = getActivity();
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
inflaters = inflater.inflate(R.layout.your_fragment_layout, container, false);
return view;
}
}
答案 4 :(得分:0)
不要使用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都将保留对Activity的引用。附加到任何此类视图的任何drawable也将引用该活动。如果您碰巧将此类drawable存储在全局集合中,您很快就会遇到大量内存泄漏。您可以使用getActivity().getApplicationContext();
但如果在安卓运行时调用onAttach()之前调用getActivity()
,则onCreateView()
将返回null。但onCreateView()
保证在beforeAttach()之前调用。因此,更好的解决方案是将您在{{1}}获得的inflater存储到实例变量中;