Autore Topic: Layout con Multi Activity per ogni TabHost  (Letto 1093 volte)

Offline andream1977

  • Utente normale
  • ***
  • Post: 260
  • Respect: +7
    • Mostra profilo
  • Dispositivo Android:
    Nexus S
  • Sistema operativo:
    windows xp
Layout con Multi Activity per ogni TabHost
« il: 29 Dicembre 2010, 20:22:31 CET »
0
Ciao

Ho creato un app con 4 tabhost
ad ogni tabhost è associato più di un'activity
Per permettere l'associazione tra activity e tabhost ho usato la classe TabGroupActivity, che funziona così:
- per ogni tabhost definisco un TabGroupActivity
- associo ad un tabhost un TabGroupActivity
- associo ad un TabGroupActivity una o più activity

P.S.
Il sorgente della classe TabGroupActivity (che allego) l'ho preso da qui:
//http://ericharlow.blogspot.com/2010/09/experience-multiple-android-activities.html

Esempio

Creo la classe TabGroupActivityPippo

Codice (Java): [Seleziona]
public class TabGroupActivityPippo extends TabGroupActivity {
        @Override
        public void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
               
                startChildActivity("ActivityPluto01", new Intent(getBaseContext(),
                                ActivityPluto01.class));


        }
}

Aggiungo la classe TabGroupActivityPippo ad un tabhost nel seguente modo


Codice (Java): [Seleziona]
intent = new Intent(this, TabGroupActivityPippo.class);
                spec = tabHost.newTabSpec("my_name").setIndicator(res.getText(R.string.tab1),
                                res.getDrawable(R.drawable.ic_tab_station_search)).setContent(
                                intent);
                tabHost.addTab(spec);

A questo punto mi sono creato il layout tramite xml della classe ActivityPluto01.java

In questa classe ho meso vari componenti: TextView, Button ecc.. ed ho messo anche uno Spinner

quando premo sulla tendina dello Spinner per aprirla mi viene generato il seguente errore:

Codice (Java): [Seleziona]
12-29 19:13:05.161: ERROR/AndroidRuntime(281): android.view.WindowManager$BadTokenException: Unable to add window -- token android.app.LocalActivityManager$LocalActivityRecord@43e5af58 is not valid; is your activity running?
12-29 19:13:05.161: ERROR/AndroidRuntime(281):     at android.view.ViewRoot.setView(ViewRoot.java:505)
12-29 19:13:05.161: ERROR/AndroidRuntime(281):     at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:177)
12-29 19:13:05.161: ERROR/AndroidRuntime(281):     at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:91)
12-29 19:13:05.161: ERROR/AndroidRuntime(281):     at android.view.Window$LocalWindowManager.addView(Window.java:424)
12-29 19:13:05.161: ERROR/AndroidRuntime(281):     at android.app.Dialog.show(Dialog.java:241)
12-29 19:13:05.161: ERROR/AndroidRuntime(281):     at android.app.AlertDialog$Builder.show(AlertDialog.java:802)
12-29 19:13:05.161: ERROR/AndroidRuntime(281):     at android.widget.Spinner.performClick(Spinner.java:257)
12-29 19:13:05.161: ERROR/AndroidRuntime(281):     at android.view.View$PerformClick.run(View.java:8816)
12-29 19:13:05.161: ERROR/AndroidRuntime(281):     at android.os.Handler.handleCallback(Handler.java:587)
12-29 19:13:05.161: ERROR/AndroidRuntime(281):     at android.os.Handler.dispatchMessage(Handler.java:92)
12-29 19:13:05.161: ERROR/AndroidRuntime(281):     at android.os.Looper.loop(Looper.java:123)
12-29 19:13:05.161: ERROR/AndroidRuntime(281):     at android.app.ActivityThread.main(ActivityThread.java:4627)
12-29 19:13:05.161: ERROR/AndroidRuntime(281):     at java.lang.reflect.Method.invokeNative(Native Method)
12-29 19:13:05.161: ERROR/AndroidRuntime(281):     at java.lang.reflect.Method.invoke(Method.java:521)
12-29 19:13:05.161: ERROR/AndroidRuntime(281):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
12-29 19:13:05.161: ERROR/AndroidRuntime(281):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
12-29 19:13:05.161: ERROR/AndroidRuntime(281):     at dalvik.system.NativeStart.main(Native Method)


cercando su internet ho letto che quest'articolo:
android.view.WindowsManager$BadTokenException | Rainbowbreeze
Però non riesco a capire dove sia l'errore nel mio codice datochè non uso mai il metodo getApplicationContext() al quale viene imputata la colpa per quest'eccezione




Offline Qlimax

  • Moderatore globale
  • Utente senior
  • *****
  • Post: 757
  • Respect: +203
    • Google+
    • _Qlimax
    • Mostra profilo
    • www.egsolutions.ch
  • Dispositivo Android:
    Galaxy Nexus - Nexus One - Wildfire - Magic
  • Play Store ID:
    egsolutions.ch
  • Sistema operativo:
    Ubuntu 12.04, Windows 7
Re:Layout con Multi Activity per ogni TabHost
« Risposta #1 il: 29 Dicembre 2010, 20:41:04 CET »
0
prova a passare this, al posto di getBaseContext  (come mostrato nell'esempio)

Offline andream1977

  • Utente normale
  • ***
  • Post: 260
  • Respect: +7
    • Mostra profilo
  • Dispositivo Android:
    Nexus S
  • Sistema operativo:
    windows xp
Re:Layout con Multi Activity per ogni TabHost
« Risposta #2 il: 30 Dicembre 2010, 20:38:48 CET »
0
Ciao Qlimax
ho sostituito in tutte le classi della mia app il getBaseContext con la parola this oppure con NomeClasse.this quindi anche nel seguente codice:

Codice (Java): [Seleziona]
public class TabGroupActivityPippo extends TabGroupActivity {
        @Override
        public void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
               
                startChildActivity("ActivityPluto01", new Intent(TabGroupActivityPippo.this,
                                ActivityPluto01.class));


        }
}

Ma ho lo stesso errore

12-30 19:28:14.704: ERROR/AndroidRuntime(337): android.view.WindowManager$BadTokenException: Unable to add window -- token android.app.LocalActivityManager$LocalActivityRecord@43e5ae28 is not valid; is your activity running?

 altri suggerimenti?

Offline Qlimax

  • Moderatore globale
  • Utente senior
  • *****
  • Post: 757
  • Respect: +203
    • Google+
    • _Qlimax
    • Mostra profilo
    • www.egsolutions.ch
  • Dispositivo Android:
    Galaxy Nexus - Nexus One - Wildfire - Magic
  • Play Store ID:
    egsolutions.ch
  • Sistema operativo:
    Ubuntu 12.04, Windows 7

Offline andream1977

  • Utente normale
  • ***
  • Post: 260
  • Respect: +7
    • Mostra profilo
  • Dispositivo Android:
    Nexus S
  • Sistema operativo:
    windows xp
Re:Layout con Multi Activity per ogni TabHost
« Risposta #4 il: 02 Gennaio 2011, 23:23:06 CET »
+1
Ho risolto, il problema è il seguente, la classe figlia ActivityPluto01.java non deve avere questa istruzione:
setContentView(R.layout.activity_pluto01);
ma questa
setContentView(LayoutInflater.from(getParent()).inflate(R.layout.activity_pluto01, null));

dove activity_pluto01 è il nome del file activity_pluto01.xml che rappresenta il suo layout
« Ultima modifica: 03 Gennaio 2011, 01:00:53 CET da andream1977 »