2014-09-29 34 views
0

我试图让LayoutInflater用于片出OnCreateView方法的,我有这个方法对活动如何获得LayoutInflater用于片出OnCreateView方法

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

,但我需要一个用于分割。我发现了一些解决方案,如:

LayoutInflater inflater = LayoutInflater.from(context); 

但我怎么定义或提供上下文。

+0

使用getActivity()代替上下文。 – 2014-09-29 09:12:03

+0

因为显而易见的答案在所有情况下都可能无法正常投票。 – 2014-09-29 09:49:32

回答

1

如何定义或提供上下文。

使用getActivity()来获取宿主片段的活动的上下文。

公共最终活动getActivity()在API级别11

返回该片段当前与相关联的活动。

+2

Downvote ???????? – Raghunandan 2014-09-29 09:16:26

1

使用这样的:

inflater = (LayoutInflater) getActivity().getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
4

使用getActivity()代替上下文:

LayoutInflater inflater = LayoutInflater.from(getActivity()); 

getActivity():其是表示在片段当前活动参考。

+0

是否有理由拒绝投票? – 2014-09-29 09:15:30

0

在Fragment的OnCreate而不是OnCreateView中定义上下文当它创建Fragment时,它只调用一次。

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; 
    } 
} 
+0

在onCreate中调用getActivity()是一个糟糕的主意,您不能保证Activity在此时被完全创建。你应该在onActivityCreated中调用它... – 2Dee 2014-09-30 12:49:50

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都会保存对该活动的引用。附在任何此类视图上的任何drawable也将参照该活动。如果您碰巧将这种绘图存储在全局集合中,您很快会遇到沉重的内存泄漏。您可以使用getActivity().getApplicationContext();,但如果在android运行时调用onAttach()之前调用getActivity(),则它将返回null。但是onCreateView()保证称为beforeonAttach()。因此,更好的解决方案是将您在onCreateView()获得的充气器存储到实例变量中;

+0

我想让它脱离方法! – 2014-09-29 09:21:31

+0

@ K.Ly编辑我的答案,将充气器存储在实例变量上; – 2014-09-29 09:47:29

+0

为什么'getActivity()'会导致内存泄漏?碎片被附加到活动。请阅读http://stackoverflow.com/questions/7298731/when-to-call-activity-context-or-application-context – Raghunandan 2014-09-29 10:16:07

相关问题