web-dev-qa-db-fra.com

Appelez getLayoutInflater () dans les lieux inactifs

Que faut-il importer ou comment puis-je appeler l'inflateur de présentation dans des lieux autres que l'activité?

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

Je peux appeler getLayoutInflater uniquement en activité, est-ce une restriction? Que se passe-t-il si je veux créer une boîte de dialogue personnalisée et que je souhaite gonfler la vue pour celle-ci, ou si je souhaite avoir un message Toast avec la vue personnalisée affichée à partir d'un service, je n'ai que le contexte du service et aucune activité mais je veux montrer un message personnalisé.

J'ai besoin de l'inflateur à des endroits du code qui ne sont pas dans la classe d'activité.

Comment puis-je faire ceci ?

172
Lukap

Vous pouvez utiliser ces activités extérieures - tout ce dont vous avez besoin est de fournir un Context:

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

Ensuite, pour récupérer vos différents widgets, vous gonflez une mise en page:

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

EDIT à partir de juillet 2014

Davide réponse sur la façon d'obtenir le LayoutInflater est en réalité plus correct que le mien (qui reste cependant valable).

371
kaspermoerch

Ou ...

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

ou

View.inflate(context, layout, parent)

10
Prakash Nadar

En utilisant un objet contextuel, vous pouvez obtenir LayoutInflater à partir du code suivant

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