2016-02-22 9 views
5

Was ist der Unterschied zwischen:Android: Was ist der Unterschied zwischen View.inflate und getLayoutInflater().

return context.getLayoutInflater().inflate(R.layout.my_layout, null); 

eine neue Ansicht Hierarchie aus der XML-Ressource angegeben aufpumpen.

und

return View.inflate(context, R.layout.my_layout, null); 

aufpumpen eine Ansicht aus einer XML-Ressource. Diese Convenience-Methode umschließt die LayoutInflater-Klasse, die eine ganze Reihe von Optionen für die Ansichtsinflation bietet.

Antwort

6

Beide sind gleich. Die zweite Version ist nur eine bequeme und kurze Methode, um die Aufgabe zu erledigen. Wenn Sie den Quellcode View.inflate() Methode sehen, finden Sie:

/** 
    * Inflate a view from an XML resource. This convenience method wraps the {@link 
    * LayoutInflater} class, which provides a full range of options for view inflation. 
    * 
    * @param context The Context object for your activity or application. 
    * @param resource The resource ID to inflate 
    * @param root A view group that will be the parent. Used to properly inflate the 
    * layout_* parameters. 
    * @see LayoutInflater 
    */ 
    public static View inflate(Context context, int resource, ViewGroup root) { 
     LayoutInflater factory = LayoutInflater.from(context); 
     return factory.inflate(resource, root); 
    } 

, die tatsächlich macht die gleiche Arbeit im Backend, die erste Methode hat Sie erwähnt.

1

sind sie gleich und tun elbe

In View.java Klasse

public static View inflate(Context context, @LayoutRes int resource, ViewGroup root) { 
     LayoutInflater factory = LayoutInflater.from(context); 
     return factory.inflate(resource, root); 
    } 

und LayoutInflater.from(context) die LayoutInflator Objekt zurück. Das ist das gleiche wie getLayoutInflator() Methode aufrufen.

public static LayoutInflater from(Context context) { 
     LayoutInflater LayoutInflater = 
       (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     if (LayoutInflater == null) { 
      throw new AssertionError("LayoutInflater not found."); 
     } 
     return LayoutInflater; 
    } 
Verwandte Themen