Rufen Sie getLayoutInflater() an Orten auf, die nicht aktiv sind

Lesezeit: 3 Minuten

Benutzer-Avatar
Lukas

Was muss importiert werden oder wie kann ich den Layout-Inflater an anderen Stellen als der Aktivität aufrufen?

public static void method(Context context){
    //this doesn't work the getLayoutInflater method could not be found
    LayoutInflater inflater = getLayoutInflater();
    // this also doesn't work 
    LayoutInflater inflater = context.getLayoutInflater();
}

Ich kann anrufen getLayoutInflater nur in der Aktivität, ist das eine Einschränkung? Was ist, wenn ich einen benutzerdefinierten Dialog erstellen und die Ansicht dafür aufblasen möchte, oder wenn ich eine Toast-Nachricht mit einer benutzerdefinierten Ansicht haben möchte, die von einem Dienst angezeigt wird, habe ich nur den Kontext des Dienstes, ich habe keine Aktivität aber ich möchte eine benutzerdefinierte Nachricht anzeigen.

Ich brauche den Inflater an Stellen im Code, die nicht in der Aktivitätsklasse enthalten sind.

Wie kann ich das machen ?

Benutzer-Avatar
Kaspermörch

Sie können diese externen Aktivitäten nutzen – alles, was Sie brauchen, ist eine Context:

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

Um dann Ihre verschiedenen Widgets abzurufen, blasen Sie ein Layout auf:

View view = inflater.inflate( R.layout.myNewInflatedLayout, null );
Button myButton = (Button) view.findViewById( R.id.myButton );

EDIT Stand Juli 2014

Davides Antwort, wie man die bekommt LayoutInflater ist eigentlich richtiger als meine (die aber immer noch gültig ist).

  • Großartig, aber jetzt funktioniert findViewById nicht, haben Sie eine Idee dazu? inflater.inflate (R.layout.some_layout, (ViewGroup) findViewById (R.id.parent));

    – Lukas

    18. Oktober 2011 um 7:48 Uhr

  • nop, die Methode inflater.inflate() hat keine überladene Methode mit nur einem int-Parameter, aber ich denke, der nächste könnte null sein.

    – Lukas

    18. Oktober 2011 um 8:06 Uhr

  • @kaspermoerch warum hast du gesagt, dass Davids Antwort richtiger ist?

    – Rohan Bhatia

    23. Dezember 2017 um 19:52 Uhr

  • @RohanBhatia Davides Antwort erfordert kein Casting, was bei mir der Fall ist. Wenn der Anruf an getSystemService gibt aus irgendeinem (unwahrscheinlichen) Grund kein Objekt vom Typ zurück LayoutInflater dann würde mein Code eine Laufzeitausnahme verursachen.

    – Kaspermörch

    2. Januar 2018 um 14:46 Uhr


  • Hat für mich funktioniert. Vielen Dank

    – CodeFluid

    8. Mai 2019 um 21:35 Uhr

Oder …

LayoutInflater inflater = LayoutInflater.from(context);

  • Sehr spät, aber eigentlich eine bessere Antwort, da die from-Funktion auch überprüft, ob Sie tatsächlich einen Inflater zurückbekommen und andernfalls einen Fehler ausgeben – was viel einfacher zu handhaben ist als eine Nullzeiger-Ausnahme irgendwo im Code. grepcode.com/file/repository.grepcode.com/java/ext/…

    – Raanan

    5. November 2013 um 23:45 Uhr


  • So kurz, viel Aufblaser

    – Danyal Aytekin

    11. Februar 2014 um 11:54 Uhr

  • @Davide Bedeutet dieses Zitat, dass die Lösung von Kaspermoerch besser ist als Ihre? “Es wird nie direkt verwendet. Verwenden Sie stattdessen getLayoutInflater() oder getSystemService(Class ), um eine Standard-LayoutInflater-Instanz abzurufen, die bereits mit dem aktuellen Kontext verbunden und für das Gerät, auf dem Sie ausgeführt werden, korrekt konfiguriert ist.” developer.android.com/reference/android/view/LayoutInflater

    – Tamás Bolvari

    12. Juli 2019 um 16:13 Uhr

  • @TamásBolvári Ist nur einfacher und klarer, tatsächlich ist die interne Implementierung die gleiche wie bei Kaspermoerch.

    – Davide

    15. Juli 2019 um 9:56 Uhr

oder

View.inflate(context, layout, parent)

  • Das ist gut ; Mit dieser Methode kann ich jedoch den booleschen Wert “attachToRoot” nicht bereitstellen.

    – DenisGL

    20. März 2016 um 8:06 Uhr

  • Es basiert auf der Anforderung, wenn Sie “attachToRoot” nicht benötigen, ist dies eine praktische Hilfsmethode oder Sie übergeben “getRootView()” als übergeordnetes Element der Methode.

    – Prakash Nadar

    20. März 2016 um 16:26 Uhr


Mit dem Kontextobjekt können Sie LayoutInflater aus dem folgenden Code abrufen

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

Benutzer-Avatar
Sikander Bacht

LayoutInflater.from(context).inflate(R.layout.row_payment_gateway_item, null);

  • Sie werden ermutigt, zusammen mit Ihrem Code einen erklärenden Text bereitzustellen.

    – Hans Hirse

    28. März 2019 um 8:06 Uhr

Benutzer-Avatar
Brian Tompsett – 汤莱恩

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

Verwenden Sie stattdessen diese!

  • Sie werden ermutigt, zusammen mit Ihrem Code einen erklärenden Text bereitzustellen.

    – Hans Hirse

    28. März 2019 um 8:06 Uhr

1014110cookie-checkRufen Sie getLayoutInflater() an Orten auf, die nicht aktiv sind

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy