Bonjour !

Je me perd dans ce problème depuis un bon moment... Après de longues recherches infructueuses, j'en appelle aux pouvoirs du cr... Heu, j'en appelle à votre aide

Dans mon application, j'ai créé un layout personnalisé calendrieradmin_day.xml :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
<?xml version="1.0" encoding="utf-8"?>
<TableRow xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/CalendrierAdmin_Day_Event_TableRow"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" >
 
    <!--  <TextView
        android:id="@+id/CalendrierAdmin_Day_Event_TextView_Name"
        android:layout_width="match_parent"
        android:layout_height="fill_parent"
        android:gravity="center" />-->
</TableRow>
Pour le moment, c'est simplement un TableRow, mais j'aurais sans doute besoin d'y ajouter des choses plus tard (comme le TextView en commentaires, par exemple).

J'ai créé trois class : Row, EventRow et EmptyRow. Row est une class abstraite, EventRow et EmptyRow héritent de Row. Row hérite de TableRow.

Je veux ajouter plusieurs EventRow et EmptyRow dans un TableLayout, et j'ai besoin de paramétrer leur taille de façon dynamique.

Dans le constructeur de EventRow et de EmptyRow, j'appelle une méthode init(), que voici pour EventRow :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
private void init(Context c, TableLayout root) {    
    root = (TableLayout)LayoutInflater.from(c).inflate(R.layout.calendrieradmin_day_event, root, true);
 
    LinearLayout.LayoutParams lp = (LinearLayout.LayoutParams) root.getLayoutParams();
 
    lp.height = getHeightOfMinute() * getDuree();
    lp.width = getTheWidth();
 
    /*
    Some other stuff
    ...
    ...
    */
 
    this.setLayoutParams(lp);
 
    root.addView(this);
 
    setOnClickListener(this);
    setOnLongClickListener(this);
}
Évidement, ça ne fonctionne pas... l'EventRow n'est pas affiché.

root est le TableLayout que je passe dans le constructeur. getHeightOfMinute() et getDuree() fonctionnent correctement et me retournent les valeurs (en pixels) auxquelles je m'attend à chaque fois. Auparavant, j'utilisais la méthode inflate() de cette manière :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
inflate(R.layout.calendrieradmin_day_event, null, false)
, mais Eclipse me donnait une alerte, comme quoi ce n'était pas bon de passer null comme argument de vue racine. Même si cela fonctionnait, j'ai voulu chercher une solution plus convenable.

J'utilisais également les méthodes setMinimumHeight() et setMinimumWidth() afin de paramétrer la taille exacte. Là encore, ça fonctionne, mais cette solution ne me convient pas : j'ai envie de comprendre pourquoi utiliser la méthode conventionnelle du LayoutParams ne fonctionne pas chez moi.

Est-ce que quelqu'un pourrait m'expliquer clairement comment fonctionne la méthode inflate() et ses histoires de vue racine ? Quel type de LayoutParams dois-je appliquer exactement ? Qui y a t-il d'incorrecte dans ma manière de procéder ?

Merci d'avance