Qu'est-ce que l'utilisation d' LayoutInflater
dans Android?
Réponses
Trop de publicités?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.
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;
}
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);
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
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);