Autore Topic: Aggiungere dinamicamente AutoCompleteTextView ad un Layout  (Letto 730 volte)

Offline costand

  • Nuovo arrivato
  • *
  • Post: 1
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    HTC Desire HD
  • Sistema operativo:
    Windows 7 64bit
Aggiungere dinamicamente AutoCompleteTextView ad un Layout
« il: 24 Gennaio 2012, 11:38:13 CET »
0
Salve a tutti!!!!!Mi presento sono costand, uno studente di ingegneria informatica alle prime armi con Android :D. Stavo sviluppando un'applicazione che, in base ad un numero intero n preso in input da un primo layout, mi crei dinamicamente un Layout secondario formato da esattamente n AutoCompleteTextView. Sapete consigliarmi come posso fare???

Io ho provato facendo addView() ma ottengo un errore e non capisco come mai -.-

Vi copio il codice (NB nel codice la View la faccio aggiungere una sola volta)

Codice (Java): [Seleziona]
package ro2.prob.assegnamento;

import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.widget.AutoCompleteTextView;
import android.widget.LinearLayout;
import android.widget.NumberPicker;

public class ProbAssegnamentoActivity extends Activity {
       
        int var=0;
        int pagconf=0;
       
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
       
                //Configurazione del NumberPicker
        NumberPicker np = (NumberPicker) findViewById(R.id.numberPicker);
        np.setMaxValue(10);
        np.setMinValue(1);
       
        //Inizializzazione
        init();
       
        //n task-risorse
        setVar(np.getValue());
       
        LinearLayout ln2 = (LinearLayout) findViewById(R.id.pagina2);
        AutoCompleteTextView autoComp = new AutoCompleteTextView(this);
        autoComp.setText("Untestoqualunque");
        ln2.addView(autoComp);
    }
   
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        MenuInflater menuInflater = getMenuInflater();
        menuInflater.inflate(R.menu.main, menu);
        return super.onCreateOptionsMenu(menu);
    }
   
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
        case R.id.menu_next :
                pagconf++;
                if (pagconf==1) setContentView(R.layout.screen2);
                else if (pagconf==2) setContentView(R.layout.screen3);
                break;
               
        case R.id.menu_restart :
                init();
                setContentView(R.layout.main);
                break;
        }
        return super.onOptionsItemSelected(item);
    }

        public int getVar() {
                return var;
        }

        public void setVar(int var) {
                this.var = var;
        }
       
        public void init(){
                this.var=0;
                this.pagconf=0;
               
        }
}

Questi sono i layout che ho utilizzato:

Codice (XML): [Seleziona]
<?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:orientation="vertical" >

    <TextView
       android:id="@+id/Titolo1"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:text="@string/Titolo1"
       android:textAppearance="?android:attr/textAppearanceMedium" />


    <NumberPicker
       android:id="@+id/numberPicker"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:layout_gravity="center" />

</LinearLayout>

Codice (XML): [Seleziona]
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
   android:id="@+id/pagina2"
   android:layout_width="match_parent"
   android:layout_height="match_parent"
   android:orientation="vertical" >

    <TextView
       android:id="@+id/textView1"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:text="@string/Titolo2"
       android:textAppearance="?android:attr/textAppearanceMedium" />

</LinearLayout>

Questo è il LogCat:
Citazione
01-24 11:19:21.372: E/AndroidRuntime(1734): FATAL EXCEPTION: main
01-24 11:19:21.372: E/AndroidRuntime(1734): java.lang.RuntimeException: Unable to start activity ComponentInfo{ro2.prob.assegnamento/ro2.prob.assegnamento.ProbAssegnamentoActivity}: java.lang.NullPointerException
01-24 11:19:21.372: E/AndroidRuntime(1734):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1956)
01-24 11:19:21.372: E/AndroidRuntime(1734):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1981)
01-24 11:19:21.372: E/AndroidRuntime(1734):    at android.app.ActivityThread.access$600(ActivityThread.java:123)
01-24 11:19:21.372: E/AndroidRuntime(1734):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1147)
01-24 11:19:21.372: E/AndroidRuntime(1734):    at android.os.Handler.dispatchMessage(Handler.java:99)
01-24 11:19:21.372: E/AndroidRuntime(1734):    at android.os.Looper.loop(Looper.java:137)
01-24 11:19:21.372: E/AndroidRuntime(1734):    at android.app.ActivityThread.main(ActivityThread.java:4424)
01-24 11:19:21.372: E/AndroidRuntime(1734):    at java.lang.reflect.Method.invokeNative(Native Method)
01-24 11:19:21.372: E/AndroidRuntime(1734):    at java.lang.reflect.Method.invoke(Method.java:511)
01-24 11:19:21.372: E/AndroidRuntime(1734):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
01-24 11:19:21.372: E/AndroidRuntime(1734):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
01-24 11:19:21.372: E/AndroidRuntime(1734):    at dalvik.system.NativeStart.main(Native Method)
01-24 11:19:21.372: E/AndroidRuntime(1734): Caused by: java.lang.NullPointerException
01-24 11:19:21.372: E/AndroidRuntime(1734):    at ro2.prob.assegnamento.ProbAssegnamentoActivity.onCreate(ProbAssegnamentoActivity.java:37)
01-24 11:19:21.372: E/AndroidRuntime(1734):    at android.app.Activity.performCreate(Activity.java:4465)
01-24 11:19:21.372: E/AndroidRuntime(1734):    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049)
01-24 11:19:21.372: E/AndroidRuntime(1734):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1920)
01-24 11:19:21.372: E/AndroidRuntime(1734):    ... 11 more


Cosa Sbaglio??????? Grazie preventivamente per l'aiuto.
« Ultima modifica: 24 Gennaio 2012, 11:54:42 CET da costand »

Offline andkse

  • Nuovo arrivato
  • *
  • Post: 2
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    nexus one
  • Play Store ID:
    ksemul
  • Sistema operativo:
    KUbuntu 10.04 LTS
Re:Aggiungere dinamicamente AutoCompleteTextView ad un Layout
« Risposta #1 il: 17 Febbraio 2012, 15:09:24 CET »
0
Ciao Sembrerebbe che l'oggetto autoComp o l'oggetto ln2 sia null.

Se non sbaglio(è un po che non tocco android) non puoi prendere con l'id il nodo root del layout. in questo caso non dovresti usare il setContentView e passargli un'oggetto view in pratica come viene fatto in questa guida :
Android, Part III: Dynamic Layouts - Android Development | Dream.In.Code

in pratica dovresti cancellare la riga dove c'è  "setContentView(R.layout.main);"

poi creare un linearLayout da 0 :

        LinearLayout ln2 =new LinearLayout (this);

assegnare l'autocomplete al linearLayout :

        AutoCompleteTextView autoComp = new AutoCompleteTextView(this);
        autoComp.setText("Untestoqualunque");
        ln2.addView(autoComp);

e poi assegnare tutto con il setContentView :

this.setContentView(ln2);

Il mio consiglio è di non creare dinamicamente l'autocomplete , inseriscila nel layout e metti la visibility a none poi nell'oncreate fai solo lo show.
Spero di esserti stato d'aiuto.