2011-07-16 3 views
2

Donc, j'ai cette petite vue que j'ai faite, qui montre essentiellement deux boutons avec des étiquettes d'état. Rien de trop compliqué.Ajouter plusieurs vues du même type

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="fill_parent" android:layout_height="fill_parent" 
android:gravity="center" 
android:orientation="vertical"> 

<LinearLayout android:orientation="horizontal" 
    android:layout_width="wrap_content" android:layout_height="wrap_content"> 
    <ToggleButton android:text="ToggleButton" android:id="@+id/toggleButton1" 
     android:layout_width="wrap_content" android:layout_height="wrap_content" 
     android:background="@drawable/on_off"> 
    </ToggleButton> 

    <TextView android:text="TextView" android:id="@+id/textView1" 
     android:layout_height="wrap_content" android:layout_width="wrap_content" 
     android:textAppearance="?android:attr/textAppearanceLarge" 
     android:layout_marginLeft="20px" android:layout_marginRight="20px" 
     android:layout_marginTop="3dp" android:layout_marginBottom="3dp"> 
    </TextView> 
    <ImageButton android:src="@drawable/preferences" 
     android:layout_height="wrap_content" android:layout_width="wrap_content" 
     android:id="@+id/imageButton2" android:background="@android:color/transparent"> 
    </ImageButton> 
</LinearLayout> 

<LinearLayout android:layout_width="wrap_content" 
    android:layout_height="wrap_content"> 
    <TextView android:id="@+id/view_monday" android:textSize="10dp" android:layout_marginRight="3dp" 
     android:layout_height="wrap_content" android:layout_width="wrap_content" android:textColor="#2F4F4F" 
     android:text="@string/monday_short"></TextView> 
    <TextView android:id="@+id/view_tuesday" android:textSize="10dp" android:layout_marginRight="3dp" 
     android:layout_height="wrap_content" android:layout_width="wrap_content" android:textColor="#2F4F4F" 
     android:text="@string/tuesday_short"></TextView> 
    <TextView android:id="@+id/view_wednesday" android:textSize="10dp" android:layout_marginRight="3dp" 
     android:layout_height="wrap_content" android:layout_width="wrap_content" android:textColor="#2F4F4F" 
     android:text="@string/wednesday_short"></TextView> 
    <TextView android:id="@+id/view_thursday" android:textSize="10dp" android:layout_marginRight="3dp" 
     android:layout_height="wrap_content" android:layout_width="wrap_content" android:textColor="#2F4F4F" 
     android:text="@string/thursday_short"></TextView> 
    <TextView android:id="@+id/view_friday" android:textSize="10dp" android:layout_marginRight="3dp" 
     android:layout_height="wrap_content" android:layout_width="wrap_content" android:textColor="#2F4F4F" 
     android:text="@string/friday_short"></TextView> 
    <TextView android:id="@+id/view_saturday" android:textSize="10dp" android:layout_marginRight="3dp" 
     android:layout_height="wrap_content" android:layout_width="wrap_content" android:textColor="#2F4F4F" 
     android:text="@string/saturday_short"></TextView> 
    <TextView android:id="@+id/view_sunday" android:textSize="10dp" android:layout_marginRight="3dp" 
     android:layout_height="wrap_content" android:layout_width="wrap_content" android:textColor="#2F4F4F" 
     android:text="@string/sunday_short"></TextView> 
</LinearLayout> 
</LinearLayout> 

Et je veux ajouter à mon activité principale avec le code suivant:

LinearLayout root = (LinearLayout)findViewById(R.id.alarms); 
View newView = View.inflate(this, R.layout.alarm, null); 
alarms.add(newView); 

Cependant, il semble que si je ne peux pas ajouter plus d'un d'entre eux, et je suis Vous ne savez pas pourquoi, ou comment contourner ce problème pour pouvoir ajouter plusieurs copies. De plus, je ne sais pas comment accéder aux pièces individuelles, car elles auraient toutes le même identifiant.

Merci, Tim

Répondre

5

Comment essayez-vous d'ajouter les copies multiples à la 'racine' LinearLayout?

Si vous essayez simplement d'appeler deux fois le addView(newView), vous essayez d'ajouter deux fois la même référence d'objet View. Cela est incorrect car vous essayez d'ajouter deux fois la même référence d'objet View. Je ne suis pas entièrement sûr de ce que le comportement défini est quand vous faites cela, mais je suppose que addView() n'effectue aucune action la deuxième fois parce qu'il vérifie qu'il contient déjà une référence à newView (serait reconnaissant si quelqu'un pouvait confirmer si c'est vrai ou faux).

Vous avez donc besoin de gonfler deux instances distinctes de votre vue enfant, je pense, en utilisant par exemple:

View newView0 = View.inflate(this, R.layout.alarm, null); 
View newView1 = View.inflate(this, R.layout.alarm, null); 

puis les ajouter individuellement.

Je pense que vous auriez alors contourner le problème des ID en double en appelant findViewById() sur les vues des enfants réels, par opposition à la société mère:

newView0.findViewById(someID) 

Mise à jour: Il suffit de tester le code dans Eclipse pour toi. J'ai ajouté deux Vues enfants créés à partir de votre fichier XML à un LinearLayout, puis changé une propriété (couleur de fond bleu) de l'une des vues dans le deuxième enfant Vue:

LinearLayout root = new LinearLayout(this); 
    LinearLayout newView0 = (LinearLayout)View.inflate(this, R.layout.main, null); 
    LinearLayout newView1 = (LinearLayout)View.inflate(this, R.layout.main, null); 
    root.addView(newView0); 
    root.addView(newView1); 
    setContentView(root); 
    newView1.findViewById(R.id.view_monday).setBackgroundColor(0xff0000ff); 
+1

vous avez raison. Vérifié maintenant. Je dois avoir confondu avec autre chose. Mon erreur. Vous avez raison. Supprimer ma réponse maintenant. –

+0

C'est une vue de défilement qui prend seulement un enfant. Mon mauvais –

+2

Hey c'est cool :) – Trevor

0

Essayez de gonfler le même point de vue tous les temps que vous voulez ajouter la vue. Par exemple, si vous ajoutez une vue chaque fois que vous appuyez sur un bouton, vous voulez déclarer l'affichage en dehors de onClick() mais affecter la vue à l'intérieur de la méthode onCLick().

Questions connexes