2013-01-14 3 views
0

J'ai décidé de créer un widget pour mon application, mais j'ai été coincé dans quelque chose!Ajout dynamique de TextViews au Widget

Je souhaite ajouter plusieurs textviews sur le widget en fonction de la taille d'une arrayList, mais après avoir effectué une recherche sur Google, j'ai finalement découvert que ce n'était pas possible.

Bien que j'ai essayé beaucoup de solutions de contournement rien ne semblait fonctionner!

Alors je veux vous demander votre aide! Est-il possible de le faire même avec des fichiers XML prédéfinis et comment le faire?

Donc, ce que je cherche réellement est un morceau approprié d'un code qui démontre ce que j'ai décrit ci-dessus! Ou toute autre aide qui peut m'amener à la solution du problème!

Merci d'avance pour votre aide!

/bump! Quelqu'un?

+0

Vous pouvez simplement parcourir la arrayList et créer une nouvelle TextView chaque fois que vous le faites. Ensuite, il suffit de l'ajouter à la vue souhaitée. Pour créer un TextView, utilisez simplement: TextView tv = new TextView (context); Ensuite, pour l'ajouter à une vue, il suffit d'appeler .addView (tv) sur la vue souhaitée. – AlexanderNajafi

+0

Eh bien, j'ai essayé cela et ça ne marche pas! C'est pourquoi j'ai indiqué dans ma question que seuls les TextViews xml prédéfinis sont autorisés mais je ne sais pas comment réaliser quelque chose comme ça! – Pavlos

+0

Si vous souhaitez utiliser du code XML, utilisez un Inflater – AlexanderNajafi

Répondre

-1
TextView[] tx = new TextView[10]; 
    TableRow[] tr = new TableRow[10]; 
    for(i=0; i<10; i++) { 
     tx[i] = new TextView(this); 
     tx[i].setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT)); 
     tx[i].setText("Data") 
     tr[i] = new TableRow(this); 
     tr[i].setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT)); 
     tr[i].addView(tx[i]); 
     // and then adding table row in tablelayout 
    } 
+0

Comme je l'ai dit dans les commentaires ci-dessus, cela ne fonctionne pas pour les widgets! – Pavlos

+0

Avez-vous une limite sur la taille ARray? <10, <25? Si oui, on peut penser à une solution alternative:) ... je crois, ça ne devrait pas être plus ... –

+0

Théoriquement oui il y a une limite mais elle est définie par l'utilisateur donc ça peut varier beaucoup en ce qui concerne la limite supérieure! – Pavlos

-1

Quelque chose comme cela devrait fonctionner si vous tenez dans votre onCreate:

View myView = (View)findViewById(R.id.Something); 

for(element : array) { 

    TextView myTV = new TextView(context); 
    myTV.setText(array.getText()); 
    myView.addView(myTV); 

} 
+0

Non, cela ne fonctionne pas pour les Widgets! Je travaille avec une classe étendue AppWidgetProvider pas une activité! – Pavlos

+0

Au lieu de findViewByID .. vous utilisez RemoteViews views = new RemoteViews (context.getPackageName(), R.layout.mywidget); – Lieuwe

+0

Je sais que mais l'ajout de TextViews sur l'exécution comme ça ne marche tout simplement pas! Il doit être un xml prédéfini et je l'ai déclaré sur ma question! – Pavlos

0

Non, cela est impossible. Cependant, vous pouvez utiliser un TextView multi-lignes.

0

C'est possible. Vous devez le faire comme ceci:

RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.widget); // your widget layout xml 
for (...){ 
    RemoteViews view = new RemoteViews(context.getPackageName(), R.layout.empty_item); // xml with just a textview 
    view.setTextViewText(R.id.textviewId, "some dynamic text"); // id of the textview and some text 
    views.addView(R.id.layout, view); // id of the layout in widget.xml  
} 
appWidgetManager.updateAppWidget(appWidgetId, views);