Autore Topic: Array TextView  (Letto 459 volte)

Offline salvatore.zagarella

  • Utente normale
  • ***
  • Post: 239
  • Respect: +2
    • Mostra profilo
    • Ieeng Solution
Array TextView
« il: 03 Febbraio 2012, 11:44:17 CET »
0
Salve ragazzi..volevo qualche informazione riguardo la possibilità di avere degli array di TextView..
Mi spiego meglio..
L'applicazione che devo realizzare si compone di tante textView, ognuna cliccabile, che rimanda ad altre act.
Avevo pensato di gestire i click delle varie textView in modo un po più efficiente, evitando di scrivere 50 volte di fila
Codice (Java): [Seleziona]
t1.setOnClickListener(new OnClickListener() {                          
                                @Override
                                public void onClick(View v) {
                                        Toast.makeText(getApplicationContext(), t1.getText(), Toast.LENGTH_SHORT).show();                                      
                                }
                        });
ripetuto 50 volte..

Quindi avevo pensato ad una soluzione del genere:
Codice (Java): [Seleziona]
                TextView t1 = (TextView)findViewById(R.id.t1);
                TextView t2 = (TextView)findViewById(R.id.t2);
               
                final TextView t[] = {t1, t2};         
                for (i=1; i<3; i++){
                        t[i].setOnClickListener(new OnClickListener() {                        
                                @Override
                                public void onClick(View v) {
                                        Toast.makeText(getApplicationContext(), t[i].getText(), Toast.LENGTH_SHORT).show();                                    
                                }
                        });

Però così va in crash l'aaplicazione ed il logCat riporta questo:
Codice: [Seleziona]
02-03 10:32:58.882: ERROR/AndroidRuntime(714): Uncaught handler: thread main exiting due to uncaught exception
02-03 10:32:58.912: ERROR/AndroidRuntime(714): java.lang.RuntimeException: Unable to start activity ComponentInfo{ieeng.solution.alive/ieeng.solution.alive.TabDirection}: java.lang.RuntimeException: Unable to start activity ComponentInfo{ieeng.solution.alive/ieeng.solution.alive.shelter}: java.lang.ArrayIndexOutOfBoundsException
02-03 10:32:58.912: ERROR/AndroidRuntime(714):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2496)
02-03 10:32:58.912: ERROR/AndroidRuntime(714):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2512)
02-03 10:32:58.912: ERROR/AndroidRuntime(714):     at android.app.ActivityThread.access$2200(ActivityThread.java:119)
02-03 10:32:58.912: ERROR/AndroidRuntime(714):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1863)
02-03 10:32:58.912: ERROR/AndroidRuntime(714):     at android.os.Handler.dispatchMessage(Handler.java:99)
02-03 10:32:58.912: ERROR/AndroidRuntime(714):     at android.os.Looper.loop(Looper.java:123)
02-03 10:32:58.912: ERROR/AndroidRuntime(714):     at android.app.ActivityThread.main(ActivityThread.java:4363)
02-03 10:32:58.912: ERROR/AndroidRuntime(714):     at java.lang.reflect.Method.invokeNative(Native Method)
02-03 10:32:58.912: ERROR/AndroidRuntime(714):     at java.lang.reflect.Method.invoke(Method.java:521)
02-03 10:32:58.912: ERROR/AndroidRuntime(714):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860)
02-03 10:32:58.912: ERROR/AndroidRuntime(714):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
02-03 10:32:58.912: ERROR/AndroidRuntime(714):     at dalvik.system.NativeStart.main(Native Method)
02-03 10:32:58.912: ERROR/AndroidRuntime(714): Caused by: java.lang.RuntimeException: Unable to start activity ComponentInfo{ieeng.solution.alive/ieeng.solution.alive.shelter}: java.lang.ArrayIndexOutOfBoundsException
02-03 10:32:58.912: ERROR/AndroidRuntime(714):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2496)
02-03 10:32:58.912: ERROR/AndroidRuntime(714):     at android.app.ActivityThread.startActivityNow(ActivityThread.java:2335)
02-03 10:32:58.912: ERROR/AndroidRuntime(714):     at android.app.LocalActivityManager.moveToState(LocalActivityManager.java:127)
02-03 10:32:58.912: ERROR/AndroidRuntime(714):     at android.app.LocalActivityManager.startActivity(LocalActivityManager.java:339)
02-03 10:32:58.912: ERROR/AndroidRuntime(714):     at android.widget.TabHost$IntentContentStrategy.getContentView(TabHost.java:648)
02-03 10:32:58.912: ERROR/AndroidRuntime(714):     at android.widget.TabHost.setCurrentTab(TabHost.java:320)
02-03 10:32:58.912: ERROR/AndroidRuntime(714):     at android.widget.TabHost.addTab(TabHost.java:213)
02-03 10:32:58.912: ERROR/AndroidRuntime(714):     at ieeng.solution.alive.TabDirection.onCreate(TabDirection.java:17)
02-03 10:32:58.912: ERROR/AndroidRuntime(714):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
02-03 10:32:58.912: ERROR/AndroidRuntime(714):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2459)
02-03 10:32:58.912: ERROR/AndroidRuntime(714):     ... 11 more
02-03 10:32:58.912: ERROR/AndroidRuntime(714): Caused by: java.lang.ArrayIndexOutOfBoundsException
02-03 10:32:58.912: ERROR/AndroidRuntime(714):     at ieeng.solution.alive.shelter.onCreate(shelter.java:24)
02-03 10:32:58.912: ERROR/AndroidRuntime(714):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
02-03 10:32:58.912: ERROR/AndroidRuntime(714):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2459)
02-03 10:32:58.912: ERROR/AndroidRuntime(714):     ... 20 more

Ovviamente il crash è in corrispondenza del setOnClick... però non so come poter risolvere..

Si accettano idee...
Grazie...
 :-P

Offline iceweasel

  • Moderatore globale
  • Utente senior
  • *****
  • Post: 878
  • Respect: +147
    • Mostra profilo
  • Dispositivo Android:
    LGE P990 - Google Nexus 5
  • Sistema operativo:
    Linux Debian Sid
Re:Array TextView
« Risposta #1 il: 03 Febbraio 2012, 11:53:05 CET »
0
Basta legge con attenzione il nome dell'eccezione lanciata:

Codice: [Seleziona]
java.lang.ArrayIndexOutOfBoundsException
In Java come in altri linguaggi gli elementi di un array partono dall'indice 0 non dal 1.
adb logcat | tee /tmp/logcat | grep TAG

Offline salvatore.zagarella

  • Utente normale
  • ***
  • Post: 239
  • Respect: +2
    • Mostra profilo
    • Ieeng Solution
Re:Array TextView
« Risposta #2 il: 03 Febbraio 2012, 11:56:14 CET »
0
Ah vero.. non me ne ero accorto.. :-p

Ora però, sistemato questo, non riesco a cogliere il giusto elemento cliccato..
Cioè mi da sempre l'ultimo indice..con questo pezzetto di codice
Codice (Java): [Seleziona]
for (i=0; i<2; i++){
                        t[i].setOnClickListener(new OnClickListener() {                        
                                @Override
                                public void onClick(View v) {
                                        Toast.makeText(getApplicationContext(), ""+t[i-1].getText().toString(), Toast.LENGTH_SHORT).show();                                    
                                }
                        });
                }

OVVIAMENTE mi restituisce sempre il contenuto della textView (i-1).. Come faccio a "capire" quale TextView è stato realmente cliccato?

Grazie in anticipo...

Offline salvatore.zagarella

  • Utente normale
  • ***
  • Post: 239
  • Respect: +2
    • Mostra profilo
    • Ieeng Solution
Re:Array TextView
« Risposta #3 il: 03 Febbraio 2012, 12:16:37 CET »
0
Risolto..
Ecco il codice..

Codice (Java): [Seleziona]
               final TextView t[] = {t1, t2};          
                for (int i=0; i<2; i++){
                        t[i].setId(i);                    //setto l'id
                }
               
                for (i=0; i<2; i++){
                        t[i].setOnClickListener(new OnClickListener() {                        
                                @Override
                                public void onClick(View v) {
                                        Toast.makeText(getApplicationContext(), ""+t[v.getId()].getText(), Toast.LENGTH_SHORT).show();                                 
                                }
                        });
                }

Grazie.
 :-)