8

Sé que es posible agregar algunos diseños como Button y a LinearLayout. Quiero crear más de uno TextView según la condición de un ciclo for.Cómo agregar múltiples dinámicas de TextView a la definición LinearLayout en main.xml

Lo he intentado a mi manera, pero no puedo crearlo. ¿Alguien sabe cómo crearlo?

El bucle for será diferente en función de la condición. Por favor ayúdenme con respecto a esto. ¿Es posible crear la matriz de TextView?

Ya he expuesto el diseño con

setContentView(R.layout.result_page); 

estoy usando funciones para añadir ese punto de vista a mi vista existente:

La función es:

public void addAll() 
{ 

    LinearLayout layout = (LinearLayout)findViewById(R.id.myLayout);  
    layout.setOrientation(1);  
    TextView name[] = null;  
    TextView website[] = null;  
    TextView category[] = null;   
    for (int i = 0; i < 5; i++) 
    {   
     name[i] = new TextView(this);   
     name[i].setText("Name = Shreyash");   
     website[i] = new TextView(this);   
     website[i].setText("Website = shreyah.co.cc");   
     category[i] = new TextView(this);   
     category[i].setText("Website Category = OWN");   
     layout.addView(name[i]);   
     layout.addView(website[i]);   
     layout.addView(category[i]);  
    } 
} 

Pero después que si ejecuto la aplicación, me muestra un error como:

09-08 11:03:28.755: ERROR/AndroidRuntime(318): FATAL EXCEPTION: main 
09-08 11:03:28.755: ERROR/AndroidRuntime(318): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.quiz.spellingquiz/com.quiz.spellingquiz.ResultDisplayPage}: java.lang.NullPointerException 
09-08 11:03:28.755: ERROR/AndroidRuntime(318):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2663) 
09-08 11:03:28.755: ERROR/AndroidRuntime(318):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679) 
09-08 11:03:28.755: ERROR/AndroidRuntime(318):  at android.app.ActivityThread.access$2300(ActivityThread.java:125) 
09-08 11:03:28.755: ERROR/AndroidRuntime(318):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033) 
09-08 11:03:28.755: ERROR/AndroidRuntime(318):  at android.os.Handler.dispatchMessage(Handler.java:99) 
09-08 11:03:28.755: ERROR/AndroidRuntime(318):  at android.os.Looper.loop(Looper.java:123) 
09-08 11:03:28.755: ERROR/AndroidRuntime(318):  at android.app.ActivityThread.main(ActivityThread.java:4627) 
09-08 11:03:28.755: ERROR/AndroidRuntime(318):  at java.lang.reflect.Method.invokeNative(Native Method) 
09-08 11:03:28.755: ERROR/AndroidRuntime(318):  at java.lang.reflect.Method.invoke(Method.java:521) 
09-08 11:03:28.755: ERROR/AndroidRuntime(318):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868) 
09-08 11:03:28.755: ERROR/AndroidRuntime(318):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626) 
09-08 11:03:28.755: ERROR/AndroidRuntime(318):  at dalvik.system.NativeStart.main(Native Method) 
09-08 11:03:28.755: ERROR/AndroidRuntime(318): Caused by: java.lang.NullPointerException 
09-08 11:03:28.755: ERROR/AndroidRuntime(318):  at com.quiz.spellingquiz.ResultDisplayPage.addAll(ResultDisplayPage.java:59) 
09-08 11:03:28.755: ERROR/AndroidRuntime(318):  at com.quiz.spellingquiz.ResultDisplayPage.onCreate(ResultDisplayPage.java:34) 
09-08 11:03:28.755: ERROR/AndroidRuntime(318):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 
09-08 11:03:28.755: ERROR/AndroidRuntime(318):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627) 
09-08 11:03:28.755: ERROR/AndroidRuntime(318):  ... 11 more 

No sé dónde estoy equivocado.

por favor ayúdenme con respecto a esto.

me dieron el resultado con código de Deev así: enter image description here

Pero quiero fijar la Palabra bajo la palabra de la etiqueta, y la respuesta debajo de la respuesta de la etiqueta. Pero, ¿cómo es posible? Creo que tengo que establecer otro LinearLayout para eso. ¿Puede alguien decirme cómo configuro otro LinearLayout para ese tipo de apariencia?

+0

Publique su código hasta el momento – Jack

+0

Agregue un código de ejemplo para mostrar lo que ya ha intentado. Esto nos ayudará a ver lo que no funciona. – elevine

+0

@Jack: por favor vea mi pregunta actualizada. –

Respuesta

11

Solo necesita crear una matriz si necesita cambiar el TextViews más tarde. Sin embargo, si necesita hacer una matriz, entonces algo como esto debería funcionar.

List<TextView> textList = new ArrayList<TextView>(NUM_OF_TEXTS); 
for(int i = 0; i < NUM_OF_TEXTS; i++) 
{ 
    TextView newTV = new TextView(context); 
    newTV.setText("New message."); 
    newTV.setTextColor(0xFFFF0000); 
    /**** Any other text view setup code ****/ 
    myLinearLayout.addView(newTV); 
    textList.add(newTV); 
} 

Si el texto es estático, una vez creado, entonces puede simplemente eliminar cualquier referencia a la lista en el código, y todavía será añadido a la LinearLayout.

EDIT:

Suponiendo entiendo su pregunta correcta, desea que el diseño sea algo como esto:

Word: 
Big 
Answer: 
42 

Word: 
Small 
Answer: 
Tough 

Word: 
Example 
Answer: 
Another Answer 

En ese caso, que, literalmente, no tiene que hacer mucho. LinearLayout pondrá todo en el orden en que lo coloca con addView. Para actualizar el código anterior, esto debería funcionar:

List<TextView> wordList = new ArrayList<TextView>(NUM_OF_WORDS); 
List<TextView> answerList = new ArrayList<TextView>(NUM_OF_ANSWERS); 

for(int i = 0; i < NUM_OF_WORDS; i++){ 
    TextView blankText = new TextView(context); 
    TextView wordText = new TextView(context); 
    TextView answerText = new TextView(context); 
    blankText.setText(" "); 
    wordText.setText("Word:"); 
    answerText.setText("Answer:"); 

    TextView newWord = new TextView(context); 
    newWord.setText(**** some method of getting the word ****); 
    TextView newAnswer = new TextView(context); 
    newAnswer.setText(**** some method of getting the answer ****); 
    /**** Any other text view setup code ****/ 

    myLinearLayout.addView(wordText); 
    myLinearLayout.addView(newWord); 
    myLinearLayout.addView(answerText); 
    myLinearLayout.addView(newAnswer); 
    myLinearLayout.addView(blankText); 

    wordList.add(newWord); 
    answerList.add(newAnswer); 
} 
+0

Consulte mi pregunta actualizada. Donde estoy equivocado? –

+0

Ok Tu código funciona. pero quiero que todo el texto se vea en Orientación vertical. Y el diseño de Fondo del todo es transparente, por lo que puedo mostrar mi diseño o fondo deMainLayout. entonces, ¿cómo debería ser posible? –

+0

Hola DeeV, he implementado tu código. funciona, pero quiero hacer algunos cambios. Por favor, mira mi pregunta editada. Y guíame sobre eso. Gracias. –

2
 LinearLayout lila = new LinearLayout(this); 
     ArrayList<Button> alb = new ArrayList<Button>(); 
     int nButton = 10; 
     for (int i = 0; i < nButton; i++) 
     { 
      alb.add(new Button(this)); 
      lila.addView(alb.get(i)); 
     } 
     //works the same way with TextView 
     alb.get(5).setText("myButton"); 

Tal vez esto podría ayudar.

EDIT: Lo siento estrictamente lo mismo que DeeV.

+0

¿funciona? –

+0

Consulte mi pregunta actualizada. Donde estoy equivocado? –

Cuestiones relacionadas