Android xml de fusion et de mise en page d'une erreur sur le gonfler
J'ai un CustomView
classe et je veux utiliser xml de mise en page. Donc, ma classe s'étend RelativeLayout
, gonfle xml de mise en page et tente de le joindre à moi.
public class CustomView extends RelativeLayout
{
public CustomView (Context context)
{
super(context);
LayoutInflater.from(context).inflate(R.layout.layers_list_item, this, true);
}
}
Si mon xml de mise en page a une certaine structure (Linéaire, par exemple) comme élément racine, il fonctionne très bien. Mais lorsque j'essaie d'utiliser <merge>
balise selon cette réponse j'ai eu cette erreur:
<merge /> can be used only with a valid ViewGroup root and attachToRoot=true
Mon xml disposition est comme:
<?xml version="1.0" encoding="utf-8"?>
<merge xmlns:android="http://schemas.android.com/apk/res/android"
... >
<CheckBox
... />
<TextView
... />
</merge>
J'ai aussi essayé de supprimer tous les attributs de <merge... >
tag, a obtenu le même résultat. Quel est le problème?
Mise à JOUR: Le code ci-dessus est correcte.
Comme secretlm mentionné, le problème était que <merge>
a été utilisé comme un root element
et gonflé dans une autre pièce od code:
ArrayAdapter<String> adapter =
new ArrayAdapter<String>(this,
R.layout.layers_list_item,
R.id.layers_list_item_text);
Et avec chaque élément ajouté adaptateur essayé de gonfler R.layout.layers_list_item
qui ont <merge>
en tant que root.
assurez-vous.
OriginalL'auteur Frederic Blase | 2012-12-26
Vous devez vous connecter pour publier un commentaire.
vous ne pouvez pas utiliser
<merge>
comme unroot element
dans votre mise en page finale sans élément conteneur. "En utilisant ce que l'élément racine est utile quand vous savez que cette disposition sera placé dans une mise en page qui contient déjà le parent approprié afin de contenir les enfants de l'élément. Ceci est particulièrement utile si vous envisagez d'inclure cette disposition dans un autre fichier de mise en page à l'aide de et cette disposition ne nécessite pas une autre ViewGroup container", de "developer.android.com"Cet exemple montre que la façon de travailler avec
<merge>
: http://www.coderzheaven.com/2011/06/26/merge-two-layout-xml-in-android/Mise à jour:
Vous devriez essayer avec le Constructeur(Context, AttributeSet) à partir de cet exemple. Je pense que ça va résoudre votre problème.
fichier test.xml:
De la classe de Test qui s'étendent à partir RelativeLayout:
Activité principale:
En page principale:
<merge>
n'est pasroot element
- il est attaché àCustomView
, qui estRelativeLayout
. De toute façon, il y a aussi un autre modèle à un niveau plus élevé - queCustomView
décrit simplement leListView
élément.J'ai mis à jour ma réponse, j'espère qu'elle permettra de résoudre votre problème.
eh bien, vous aviez raison au sujet de
root element
- xml avec<merge>
comme unroot
a été utilisé dansArrayAdapter
constructeur, et gonflé à l'intérieur, il a provoqué l'erreurMerci beaucoup pour cette solution, vous avez fait ma journée
^ et le mien, n'a jamais compris que l'indicateur booléen sur la fin de gonfler, maintenant, je ne
OriginalL'auteur secretlm