it-swarm.com.de

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

Was muss importiert werden oder wie kann ich den Layout Inflater an anderen Orten als bei Aktivitäten 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 getLayoutInflater nur in Aktivität aufrufen. Ist das eine Einschränkung? Was passiert, wenn ich ein benutzerdefiniertes Dialogfeld erstellen und die Ansicht dafür erweitern möchte, oder wenn eine Toast-Nachricht mit einer benutzerdefinierten Ansicht von einem Dienst angezeigt werden soll, habe ich nur den Kontext von dem Dienst, für den ich keine Aktivität habe aber ich möchte benutzerdefinierte Nachricht anzeigen.

Ich brauche den Inflater an Stellen im Code, die nicht zur Aktivitätsklasse gehören.

Wie kann ich das machen ?

172
Lukap

Sie können diese externen Aktivitäten verwenden. Sie müssen lediglich ein Context angeben:

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 );

BEARBEITEN ab Juli 2014

Davides Antwort , wie man die LayoutInflater erhält, ist tatsächlich korrekter als meine (was aber immer noch gültig ist).

371
kaspermoerch

Oder ...

LayoutInflater inflater = LayoutInflater.from(context);
242
Davide

oder

View.inflate(context, layout, parent)

10
Prakash Nadar

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

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