2014-01-08 5 views
28

Es gibt einen Weg layoutInflater zu bekommen:Was ist der richtige Weg, Layout-Inflator in Android zu bekommen?

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

und einen anderen Weg:

LayoutInflater inflater = LayoutInflater.from(context); 

ein drittes (wenn ich in einer Aktivität am) ist:

LayoutInflater inflater = getLayoutInflater(); 

So Was ist der Unterschied zwischen ihnen?

Beachten Sie, dass meine Anwendung funktionierte, wenn ich den dritten Inflater an meinen Adapter sendete. Aber als ich den Kontext sendete und den Inflator über den zweiten Weg erstellte, tat es das nicht!

+3

nicht viel von einem Unterschied – Raghunandan

+1

suchen Sie nach diesen Methoden auf grepcode, damit Sie die Unterschiede zwischen ihnen verstehen können – Blackbelt

+1

Ästhetisch, 1. :) Ansonsten, alle gleich. – himanshurb

Antwort

4

Der einzige Unterschied ist der Kontext, die Sie verwenden. Wenn der Kontext, den Sie mit LayoutInflater.fromContext() oder context.getSystemService(...) verwenden, tatsächlich eine Aktivität ist, sollte sie Activity.getLayoutInflater() entsprechen. Wenn es das Anwendungsobjekt ist, haben Sie möglicherweise Probleme beim Aufblasen von Sichten, die Fragmente enthalten, IIRC.

16

Verwendung außerhalb Ihrer Tätigkeit

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

Innerhalb Ihrer Tätigkeit

 LayoutInflater inflater = getLayoutInflater(); 

Check this

Wenn Sie die Android Quelle öffnen können Sie sehen, dass die LayoutInflator.from Methode, wie so aussieht :

/** 
    * Obtains the LayoutInflater from the given context. 
    */ 
    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; 
    } 

und es gibt keinen Unterschied

Solange die Aktivität oder Fenster, die getLayoutInflater() hat den gleichen Kontext aufruft, die getSystemService() nennen würde, gibt es keinen Unterschied.

+0

Sie machten y Tag, ich suchte von letzten fünf Tage, aber mit diesem Fehler kein Glück, jetzt funktioniert Ihre Lösung gut @Shyam Deore –

2

Eigentlich denke ich, dass die getLayoutInflater() - Methode der Aktivität eine Convenience - Methode ist.

Denken Sie daran, dass Activity Unterklassen Context, so dass alle verfügbaren Methoden innerhalb Context auch in der Activity Klasse verfügbar sind.

Intern wird es ein Aufruf an LayoutInflater.fromContext() oder context.getSystemService() sein, so würde ich zu context.getSystemService beide bleibt auch den unnötigen Methodenaufruf zu vermeiden klarstellen, dass ich einen Anruf an einen Systemdienst mache.