383 votes

Ce n'Disposition Inflater dans Android?

Qu'est-ce que l'utilisation d' LayoutInflater dans Android?

334voto

Pentium10 Points 68884

LayoutInflater classe est utilisée pour instancier disposition un fichier XML correspondant Afficher les objets.

En d'autres termes, il prend comme entrée un fichier XML et génère l'Affichage des objets.

165voto

Macarse Points 36519

Lorsque vous utilisez un affichage personnalisé dans un ListView vous devez définir la ligne de mise en page. Vous créez un document xml où vous placer des widgets android, puis dans l'adaptateur du code que vous avez à faire quelque chose comme ceci:

public MyAdapter(Context context, List<MyObject> objects) extends ArrayAdapter {
  super(context, 1, objects);
  /* We get the inflator in the constructor */
  mInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
  View view;
  /* We inflate the xml which gives us a view */
  view = mInflater.inflate(R.layout.my_list_custom_row, parent, false);

  /* Get the item in the adapter */
  MyObject myObject = getItem(position);

  /* Get the widget with id name which is defined in the xml of the row */
  TextView name = (TextView) view.findViewById(R.id.name);

  /* Populate the row's xml with info from the item */
  name.setText(myObject.getName());

  /* Return the generated view */
  return view;
}

33voto

Scott Hellam Points 109

LayoutInflater.inflate() fournit un moyen de convertir un res/layout/*.fichier xml de définition d'un point de vue dans un véritable objet de Vue utilisables dans le code source de votre application.

de base en deux étapes: obtenir le inflater puis gonfler la ressource

Comment obtenez-vous l'inflater?

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

Comment obtenez-vous l'afficher en supposant que le fichier xml est "list_item.xml"?

View view = inflater.inflate(R.layout.list_item, parent, false);

22voto

MSquare Points 1232

Voici un autre exemple similaire à la précédente, mais étendus à d'autres de démontrer gonfler les paramètres et le comportement dynamique qu'il peut fournir.

Supposons que votre ListView ligne de mise en page peut avoir un nombre variable de TextViews. Alors d'abord vous gonfler l'élément de base de la Vue (comme pour l'exemple précédent), puis de la boucle de l'ajout dynamique de TextViews au moment de l'exécution. En utilisant android:layout_weight en outre aligne tout à la perfection.

Voici les Mises en page de ressources:

list_layout.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:orientation="horizontal" >
    <TextView 
        android:id="@+id/field1"
        android:layout_width="0dp"  
        android:layout_height="wrap_content" 
        android:layout_weight="2"/>
    <TextView 
        android:id="@+id/field2"
        android:layout_width="0dp"  
        android:layout_height="wrap_content" 
        android:layout_weight="1"
/>
</LinearLayout>

schedule_layout.xml

<?xml version="1.0" encoding="utf-8"?>
   <TextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="0dp"  
    android:layout_height="wrap_content" 
    android:layout_weight="1"/>

Remplacer getView méthode dans le prolongement de BaseAdapter classe

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    LayoutInflater inflater = activity.getLayoutInflater();
    View lst_item_view = inflater.inflate(R.layout.list_layout, null);
    TextView t1 = (TextView) lst_item_view.findViewById(R.id.field1);
    TextView t2 = (TextView) lst_item_view.findViewById(R.id.field2);
    t1.setText("some value");
    t2.setText("another value");

    // dinamically add TextViews for each item in ArrayList list_schedule
    for(int i = 0; i < list_schedule.size(); i++){
        View schedule_view = inflater.inflate(R.layout.schedule_layout, (ViewGroup) lst_item_view, false);
        ((TextView)schedule_view).setText(list_schedule.get(i));
        ((ViewGroup) lst_item_view).addView(schedule_view);
    }
    return lst_item_view;
}

Remarque différentes gonfler les appels de méthode:

inflater.inflate(R.layout.list_layout, null); // no parent
inflater.inflate(R.layout.schedule_layout, (ViewGroup) lst_item_view, false); // with parent preserving LayoutParams

12voto

Cette classe est utilisé pour instancier disposition un fichier XML correspondant View objets. Il n'est jamais être utilisé directement; utilisez getLayoutInflater() ou getSystemService(String) pour récupérer une norme LayoutInflater instance qui est déjà accroché au contexte actuel et correctement configuré pour l'appareil que vous exécutez sur. Par exemple:

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X