如何从OnCreateView方法中获取片段的LayoutInflater

时间:2014-09-29 09:10:26

标签: android android-fragments

我试图从OnCreateView方法中获取片段的LayoutInflater,我有这个方法用于活动

 inflater = (LayoutInflater) activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

但是我需要一个人才。我找到了一些解决方案,如:

LayoutInflater inflater = LayoutInflater.from(context);

但我如何定义或提供上下文。

5 个答案:

答案 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存储到实例变量中;