8

So che è possibile aggiungere alcuni layout come Button e TextView a LinearLayout. Voglio creare più di uno TextView in base alle condizioni di un ciclo for.Come aggiungere più TextView dynamicall per definire LinearLayout in main.xml

L'ho provato a modo mio, ma non sono in grado di crearlo. Qualcuno sa come crearlo?

Il ciclo for sarà diverso in base alle condizioni. Per favore aiutami riguardo a questo. È possibile creare l'array di TextView?

ho già impostato il layout con

setContentView(R.layout.result_page); 

Sto usando la funzione di aggiungere che vista la mia vista esistente:

La funzione è:

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]);  
    } 
} 

Ma dopo che se eseguo l'applicazione, mi mostra errore come:

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 

Non so dove mi sbaglio.

per favore aiutatemi a riguardo.

ho ottenuto il risultato con il codice di Deev come questo: enter image description here

ma voglio impostare la Parola sotto la parola tag, e risposta sotto la risposta tag. Ma com'è possibile? Penso di dover impostare un altro LinearLayout per quello. Qualcuno può dirmi come ho impostato un altro LinearLayout per quel tipo di aspetto?

+0

Inserisci il tuo codice finora – Jack

+0

Aggiungi un codice di esempio per mostrare ciò che hai già provato. Questo ci aiuterà a vedere cosa non funziona. – elevine

+0

@Jack: Si prega di consultare la mia domanda aggiornata. –

risposta

11

È necessario creare un array solo se è necessario modificare lo TextViews in seguito. Tuttavia, se hai bisogno di creare un array, allora qualcosa del genere dovrebbe funzionare.

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); 
} 

Se il testo è statica, una volta creato, allora si può semplicemente rimuovere ogni riferimento all'elenco nel codice, e sarà ancora aggiunto alla LinearLayout.

EDIT:

Supponendo che ho capito la tua domanda giusta, si desidera che il layout, per avere qualcosa di simile:

Word: 
Big 
Answer: 
42 

Word: 
Small 
Answer: 
Tough 

Word: 
Example 
Answer: 
Another Answer 

In tal caso, è letteralmente non c'è bisogno di fare molto. LinearLayout inserirà tutto nell'ordine in cui lo si posiziona con addView. Per aggiornare il mio codice precedente, questo dovrebbe funzionare:

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

Si prega di consultare la mia domanda aggiornata. Dove sbaglio? –

+0

Ok, il tuo codice funziona. ma voglio tutto il textview in Vertical Orientation. E lo sfondo dell'intero layout è transperant, quindi posso mostrare il design o lo sfondo di myMainLayout. allora come dovrebbe essere possibile? –

+0

Ciao DeeV, ho implementato il tuo codice. Funziona ma voglio fare alcune modifiche. Si prega di consultare la mia domanda modificata. E guidami riguardo ad esso. Grazie. –

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"); 

Forse questo potrebbe aiutare.

MODIFICA: Scusa rigorosamente uguale a DeeV.

+0

funziona ??? –

+0

Si prega di consultare la mia domanda aggiornata. Dove sbaglio? –

Problemi correlati