Visualizzazione stampabile
-
Problema spinner
Ciao a tutti,
vi chiedo aiuto per un problema con uno spinenr in android.
Ho creato un array String come xml in strings:
<string-array name="month">
<item>01</item>
<item>02</item>
<item>03</item>
<item>04</item>
<item>05</item>
<item>06</item>
<item>07</item>
<item>08</item>
<item>09</item>
<item>10</item>
<item>11</item>
<item>12</item>
</string-array>
Ho attribuito i valori allo spinner direttamente da designer puntando appunto a "month"
e poi ho associato da codice java lo spinner:
Spinner SPmonth = (Spinner) findViewById(R.id.month);
e vorrei che il programma selezionasse automaticamente un mese passsato come parametro ovvero:
SPmonth.setSelection(2);
Il problema è che quando arriva a questa riga di codice il programma si blocca e si chiude automaticamente "has stopped"
Qualcuno che ha qualche idea?
Grazie
-
Ciao Simone,
dovresti fornire qualche dettaglio in più perchè formalmente sembra tutto ok.
Non è che l'output della vista di Android monitor ti riporta qualche errore? Perchè se il programma si chiude a quella riga mi viene da pensare ad una NullPointerException generata dalla spinner.
Vedi di metterti in debug con punto di interruzione sulla riga della setSelection(2) e verifica che la variabile SPmonth sia diversa da null.
Se non fosse così riporta l'xml del layout e la classe dove usi la spinner così da poter valutare meglio la situazione.
-
Quote:
Originariamente inviato da
fattazzo
Ciao Simone,
dovresti fornire qualche dettaglio in più perchè formalmente sembra tutto ok.
Non è che l'output della vista di Android monitor ti riporta qualche errore? Perchè se il programma si chiude a quella riga mi viene da pensare ad una NullPointerException generata dalla spinner.
Vedi di metterti in debug con punto di interruzione sulla riga della setSelection(2) e verifica che la variabile SPmonth sia diversa da null.
Se non fosse così riporta l'xml del layout e la classe dove usi la spinner così da poter valutare meglio la situazione.
Ciao,
innanzitutto grazie per la risposta.
Ho provato a controllare e lo spinenr viene riportato = null ma come mai?
-
Immaginavo fosse quello il problema dalla tua descrizione.
Posta l'xml del layout e la classe dove selezioni la spinner così forse posso capire il perchè non è avvalorata.
-
Quote:
Originariamente inviato da
fattazzo
Immaginavo fosse quello il problema dalla tua descrizione.
Posta l'xml del layout e la classe dove selezioni la spinner così forse posso capire il perchè non è avvalorata.
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent" android:layout_height="match_parent">
<TextView
android:id="@+id/TextViewTitle"
style="@style/TextNormal"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:layout_marginTop="23dp"
android:text="@string/Add" />
<TextView
android:id="@+id/TextViewSG"
style="@style/Text2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/TextViewTitle"
android:layout_centerHorizontal="true"
android:layout_marginTop="12dp"
android:text="@string/selectGame" />
<TextView
android:id="@+id/TVMonth"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Month"
android:layout_above="@+id/month"
android:layout_alignStart="@+id/month" />
<TextView
android:id="@+id/TVYear"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Year"
android:layout_above="@+id/year"
android:layout_alignStart="@+id/year" />
<Spinner
android:id="@+id/month"
android:layout_width="100dp"
android:layout_height="50dp"
android:layout_alignBottom="@+id/TextViewSG"
android:layout_alignParentStart="true"
android:layout_marginStart="12dp"
android:entries="@array/month" />
<Spinner
android:id="@+id/year"
android:layout_width="100dp"
android:layout_height="50dp"
android:layout_alignBottom="@+id/TextViewSG"
android:layout_marginStart="16dp"
android:layout_toEndOf="@+id/TextViewTitle"
android:entries="@array/year" />
<ScrollView
android:id="@+id/ScrollViewListGame"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_centerHorizontal="true"
android:layout_marginTop="100dp">
<RelativeLayout
android:id="@+id/LayoutLScrollView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
</RelativeLayout>
</ScrollView>
</RelativeLayout>
Classe:
Btn2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
// Inizializzo la mia dialog
final Dialog Add= new Dialog(Insert.this);
// Evito la presenza della barra del titolo nella mia dialog
Add.requestWindowFeature(Window.FEATURE_NO_TITLE);
// Carico il layout della dialog al suo intenro
Add.setContentView(R.layout.activity_add_2);
Spinner SPmonth = (Spinner) findViewById(R.id.month);
Spinner SPyear = (Spinner) findViewById(R.id.year);
//Istanzio il layout della scroll view
RelativeLayout SVLayout = (RelativeLayout) findViewById(R.id.LayoutLScrollView);
SPmonth.setSelection(2,true);
SPyear.setSelection(3);
Add.show();
}
});
-
Btn2 non lo vedo nel layout, si trova in un altra activity/fragment di quello che rappresenta l'xml che hai postato?
-
Quote:
Originariamente inviato da
fattazzo
Btn2 non lo vedo nel layout, si trova in un altra activity/fragment di quello che rappresenta l'xml che hai postato?
Esatto io dentro un'activity principale (main) che contiene il btn2 apro la dialog caricandomi il layout in questione
-
Allora credo che il mistero sia svelato.
il findViewById(R.id.month) lo stai eseguendo dalla tua activity principale quindi può trovarti solo le view contenute nel suo layout ( es il Btn2 ).
La spinner si trova nel layout del dialog quindi per ottenere qualsiasi view del dialog devi richiamare il findViewById su di esso quindi il tuo codice va cambiato in
codice:
Spinner SPmonth = (Spinner) Add.findViewById(R.id.month);
Non ho un IDE sotto mano quindi vado a memoria ma dovrebbe proprio essere così. :laughing:
-
Quote:
Originariamente inviato da
fattazzo
Allora credo che il mistero sia svelato.
il findViewById(R.id.month) lo stai eseguendo dalla tua activity principale quindi può trovarti solo le view contenute nel suo layout ( es il Btn2 ).
La spinner si trova nel layout del dialog quindi per ottenere qualsiasi view del dialog devi richiamare il findViewById su di esso quindi il tuo codice va cambiato in
codice:
Spinner SPmonth = (Spinner) Add.findViewById(R.id.month);
Non ho un IDE sotto mano quindi vado a memoria ma dovrebbe proprio essere così. :laughing:
Ora funziona. Grazie mille :D si vede che sono agli albori della programmazione in android :D
-
Quote:
Originariamente inviato da
Simone9969996
Ora funziona. Grazie mille :D si vede che sono agli albori della programmazione in android :D
Perdonami ma visto che ci sono ti chiedo un'ulteriorie informazione che penso sia simile.
Ovvero nella stessa dialog che richiamo mi sto costruendo una list view creando bottoni e immagini nuove.
Ti riporto il codice
//Istanzio il layout della scroll view
RelativeLayout SVLayout = (RelativeLayout) Add.findViewById(R.id.LayoutLScrollView);
ImageView Image = new ImageView(insert.this);
//Setto parametri Image
//parametri layout
RelativeLayout.LayoutParams RLayout = new RelativeLayout.LayoutParams(LinearLayout.LayoutPar ams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
Drawable b = getResources().getDrawable(R.drawable.ic_action_pr ovavalid);
Image.setImageDrawable(b);
Image.setLayoutParams(RLayout);
Image.setId(12);
Image.setMaxWidth(50);
Image.setMaxHeight(50);
Image.setPadding(20,20,20,20);
SVLayout.addView(Image,1);
Anche questo pezzo di codice mi da errore ovvero:
java.lang.reflect.InvocationTargetException
java.lang.IndexOutOfBoundsException: index=1 count=0
Può essere un problema simile?
Grazie mille di nuovo