ActivityGroup mit Spinner (BadTokenException)

  • Antworten:5
  • Bentwortet
Gelöschter Account
  • Forum-Beiträge: 66

18.10.2010, 10:08:43 via Website

Hallo,

Ich habe ein Programm mit Tabs und wollte, wenn ich jetzt in einem Tab eine neue Activity aufrufe, dass die Tab Leiste sichtbar bleibt.

Hab mich an dieses Beispiel gehalten http://blog.henriklarsentoft.com/2010/07/android-tabactivity-nested-activities/ und eine ActivityGroup
erstellt, die das für mich Regelt. Das hat auch gut geklappt. Wenn ich jetzt aber einen Spinner in meiner Activity anklicke, kriege ich eine BadToken Exception.

1ERROR/AndroidRuntime(445): Caused by: android.view.WindowManager$BadTokenException: Unable to add window — token android.app.LocalActivityManager$LocalActivityRecord@43e46170 is not valid; is your activity running?

Anscheinend haben das Problem sehr viele, bloß habe ich dazu noch keine Lösung gefunden.

Kann mir da jemand helfen?

Antworten
mybecks
  • Forum-Beiträge: 27

18.10.2010, 15:18:43 via Website

Hallo,

hatte kürzlich auch diese "Unable to add window " Exception im Zusammenhang mit einem ProgressDialog & ActivityGroup.
Vermute du befindest dich in einer Activity innerhalb der Group.

Verwende anstatt this einfach getParent(). So funktionierte es bei mir. Kann sein, dass es analog beim Spinner auch funktioniert!


Viele Grüße,
mybecks

Antworten
Gelöschter Account
  • Forum-Beiträge: 66

18.10.2010, 15:59:20 via Website

Hallo

danke für deine Antwort.

Aber mein problem ist, dass ich den Spinner nur im xml Layout drinnen hab. Ich ruf den ja nur mit = (Spinner)findViewById(R.id.xx);
auf.

edit:
------

Ok habs hinbekommen, hab den Spinner jetzt einfach dynamisch in der Activity erzeugt und statt "this", getParent() genommen.

also nochmals danke mybecks ;)

— geändert am 19.10.2010, 09:06:45

Antworten
mybecks
  • Forum-Beiträge: 27

19.10.2010, 10:03:24 via Website

Hab grad folgendes Snippet gefunden:

1@Override
2public void onCreate(Bundle savedInstanceState) {
3 super.onCreate(savedInstanceState);
4 setContentView(R.layout.main);
5
6 Spinner s = (Spinner) findViewById(R.id.spinner);
7 ArrayAdapter adapter = ArrayAdapter.createFromResource(
8 this, R.array.planets, android.R.layout.simple_spinner_item);
9 adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
10 s.setAdapter(adapter);
11}

Wenn du dort das this durch getParent() ersetzt sollte es auch funktionieren.
Habs nicht getestet und auch bisher nicht mit Spinnern gearbeitet, aber theoretisch .... ;)

Gruß,
mybecks

Antworten
Gelöschter Account
  • Forum-Beiträge: 66

19.10.2010, 10:16:05 via Website

danke,

aber habs vorher schon selbst hingekriegt ^^

1Spinner grund = new Spinner(getParent());
2
3String[] grundString = getResources().getStringArray(R.array.grund);
4
5 ArrayAdapter<?> grundAdapter = new ArrayAdapter<Object>(this,
6 android.R.layout.simple_spinner_item, grundString);
7 grundAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
8 grund.setAdapter(grundAdapter);
9
10 karte_sperren.addView(grund, 1);

so hats funktioniert.

Antworten
ibrahim_21
  • Forum-Beiträge: 1

18.06.2012, 16:09:29 via Website

Hallo Leute
ich bin anfänger bei Apps Entwicklung.. ich habe eine Frage . Ich habe eine Tabactiviyt gemacht. und in Tabmenu (Tabactivity) eine Dialogfenster erstellt. Aber komische weise bekomme ich immer diese Fehler und kann ich Dialogfenster nicht öffnen. Programm kommt immer showDialog(0); das verursacht eine Fehler :
06-18 14:02:10.935: E/AndroidRuntime(421): android.view.WindowManager$BadTokenException: Unable to add window -- token android.app.LocalActivityManager$LocalActivityRecord@44f64048 is not valid; is your activity running?

Was soll ich hier machen :
Meine Code lautet :
1package com.faqih.tutorialtab;
2
3import java.util.ArrayList;
4import java.util.LinkedList;
5
6import android.app.Activity;
7import android.app.ActivityGroup;
8import android.app.AlertDialog;
9import android.app.Dialog;
10import android.content.DialogInterface;
11import android.content.Intent;
12import android.os.Bundle;
13import android.os.Handler;
14import android.os.Message;
15import android.view.KeyEvent;
16import android.view.View;
17import android.view.View.OnClickListener;
18import android.widget.Button;
19import android.widget.Toast;
20
21
22public class secimliyemek_main extends Activity {
23
24 public static secimliyemek_main secimliyemek_main_;
25
26 public static sayilar sayilarr;
27 public static String baslik ;
28 public static bilgideposu arraylistesi;
29 public static String [] baharat ;
30 public static String [] option;
31 public static boolean[] _selections ;
32 public static LinkedList<String> malzemeler =new LinkedList<String>();
33
34 protected Button Button_sebzeler;
35 protected Button Button_baharatlar;
36 protected Button Button_baklagiller;
37
38 @Override
39 public void onCreate(Bundle savedInstanceState)
40 {
41 super.onCreate(savedInstanceState);
42
43 setContentView(R.layout.secimliyemek_main);
44
45 Button_sebzeler = ( Button ) findViewById( R.id.sebzeler );
46 Button_sebzeler.setOnClickListener( new ButtonClickHandler_sebzeler() );
47 Button_baharatlar = ( Button ) findViewById( R.id.baharat );
48 Button_baharatlar.setOnClickListener( new ButtonClickHandler_baharat() );
49 Button_baklagiller = ( Button ) findViewById( R.id.baklagil);
50 Button_baklagiller.setOnClickListener( new ButtonClickHandler_baklagiller() );
51
52 Button yemek_bul =(Button)findViewById(R.id.yemek_bul);
53
54 yemek_bul.setOnClickListener(new OnClickListener() {
55
56 public void onClick(View v) {
57
58 View view1 = contactgroupeinkaufliste.ContactGroupEinkaufliste_.getLocalActivityManager().startActivity("secimliyemek_liste",
59 new Intent("com.faqih.tutorialtab.SECIMLIYEMEK_LISTE")
60 .addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)).getDecorView();
61
62 // Replace the view of this ActivityGroup
63 contactgroupeinkaufliste.ContactGroupEinkaufliste_.replaceView(view1);
64
65 toplammalzeme();
66 }
67 });
68
69
70 }
71
72
73
74 public class ButtonClickHandler_sebzeler implements View.OnClickListener {
75 public void onClick( View view ) {
76
77 option =arraylistesi.sebzeler;
78 baslik = "Sebzeler";
79
80 boolean[] _selectionss = new boolean[ option.length ];
81 _selections=_selectionss;
82
83 Button_sebzeler = ( Button ) findViewById( R.id.sebzeler );
84 // Wenn button Click kommt hier fehler
85 showDialog(0);
86 }
87 }
88
89
90 public class ButtonClickHandler_baharat implements View.OnClickListener {
91 public void onClick( View view ) {
92
93 option =arraylistesi.baharatlar;
94 baslik = "Baharatlar";
95
96 boolean[] _selectionss = new boolean[ option.length ];
97 _selections=_selectionss;
98
99 Button_baharatlar = ( Button ) findViewById( R.id.baharat );
100 showDialog(2);
101
102 }
103 }
104
105
106 public class ButtonClickHandler_baklagiller implements View.OnClickListener {
107 public void onClick( View view ) {
108
109 option =arraylistesi.baklagiller;
110 baslik = "Baklagiller";
111
112 boolean[] _selectionss = new boolean[ option.length ];
113 _selections=_selectionss;
114
115 Button_baklagiller = ( Button ) findViewById( R.id.baklagil );
116 showDialog(3);
117 }
118 }
119
120
121
122 @Override
123 protected Dialog onCreateDialog( int id )
124 {
125 return
126 new AlertDialog.Builder( this )
127 .setTitle( baslik)
128 .setMultiChoiceItems( option, _selections, new DialogSelectionClickHandler() )
129 .setPositiveButton( "OK", new DialogButtonClickHandler() )
130 .create();
131 }
132
133
134
135 public class DialogSelectionClickHandler implements DialogInterface.OnMultiChoiceClickListener
136 {
137 public void onClick( DialogInterface dialog, int clicked, boolean selected )
138 {
139 printSelectedPlanets(selected,clicked);
140 Toast.makeText(secimliyemek_main.this, clicked +" "+selected, Toast.LENGTH_SHORT).show();
141 }
142 }
143
144
145 public class DialogButtonClickHandler implements DialogInterface.OnClickListener
146 {
147 public void onClick( DialogInterface dialog, int clicked )
148 {
149
150
151 switch( clicked )
152 {
153 case DialogInterface.BUTTON_POSITIVE:
154 closeContextMenu();
155 break;
156
157 case DialogInterface.BUTTON_NEGATIVE:
158 break;
159 }
160 }
161
162 }
163
164 protected void printSelectedPlanets(boolean clickedv, int clickedsv){
165
166 if(clickedv == true){
167 malzemeler.add(option[ clickedsv ]);
168 Toast.makeText(secimliyemek_main.this, "eklenen: "+option[ clickedsv ] , Toast.LENGTH_SHORT).show();
169 }
170 if(clickedv== false){
171 malzemeler.remove(option[ clickedsv]);
172 Toast.makeText(secimliyemek_main.this, "cikarilan: "+option[ clickedsv ] , Toast.LENGTH_SHORT).show();
173 }
174
175 }
176
177 protected void toplammalzeme(){
178 for(int kk=0; kk<malzemeler.size(); kk++){
179 Toast.makeText(secimliyemek_main.this, kk+" .Malzeme : "+malzemeler.get(kk) , Toast.LENGTH_SHORT).show();
180 }
181
182 }
183
184
185 public boolean onKeyDown(int keyCode, KeyEvent event){
186 if (keyCode == KeyEvent.KEYCODE_BACK){
187 contactgroupeinkaufliste.ContactGroupEinkaufliste_. back();
188 return true;
189 }
190 return super.onKeyDown(keyCode, event);
191 }
192
193}

Tab ActivityGroup code :

1package com.faqih.tutorialtab;
2
3import java.util.ArrayList;
4
5import android.app.ActivityGroup;
6import android.content.Intent;
7import android.os.Bundle;
8import android.view.KeyEvent;
9import android.view.View;
10
11public class contactgroupeinkaufliste extends ActivityGroup {
12 View rootView;
13
14 public static contactgroupeinkaufliste ContactGroupEinkaufliste_;
15 sayilar ddsayilar ;
16 private ArrayList<View> history1;
17
18 @Override
19public void onCreate(Bundle savedInstanceState) {
20 super.onCreate(savedInstanceState);
21 this.history1 = new ArrayList<View>();
22 ContactGroupEinkaufliste_ = this;
23
24
25
26 View view = getLocalActivityManager().startActivity("CitiesActivity", new
27 Intent(this,secimliyemek_main.class)
28 .addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)).getDecorView();
29
30
31
32// Replace the view of this ActivityGroup
33replaceView(view);
34
35 }
36
37public void replaceView(View v) {
38
39 // Adds the old one to history
40 history1.add(v);
41
42 // Changes this Groups View to the new View.
43 setContentView(v);
44}
45
46
47
48public void back() {
49 if(history1.size() > 0) {
50 history1.remove(history1.size()-1);
51 if(history1.size()<=0){
52 finish();
53 }else{
54 setContentView(history1.get(history1.size()-1));
55 }
56 }else {
57 finish();
58 }
59}
60
61@Override
62public void onBackPressed() {
63 contactgroupeinkaufliste.ContactGroupEinkaufliste_.back();
64}
65
66@Override
67public boolean onKeyDown(int keyCode, KeyEvent event){
68 if (keyCode == KeyEvent.KEYCODE_BACK){
69 contactgroupeinkaufliste.ContactGroupEinkaufliste_.back();
70 return true;
71 }
72 return super.onKeyDown(keyCode, event);
73
74}
75
76
77}

Tab Main Code :

1package com.faqih.tutorialtab;
2
3import android.app.TabActivity;
4import android.content.Intent;
5import android.content.res.Resources;
6import android.os.Bundle;
7import android.widget.TabHost;
8
9public class main extends TabActivity {
10 /** Called when the activity is first created. */
11 @Override
12 public void onCreate(Bundle savedInstanceState) {
13 super.onCreate(savedInstanceState);
14 setContentView(R.layout.main);
15
16 Resources res = getResources();
17 TabHost tb = getTabHost();
18 TabHost.TabSpec spec;
19 Intent inten;
20
21 //tourism tab
22 inten = new Intent().setClass(this, tum_yemekler.class);
23 spec = tb.newTabSpec("tab1").setIndicator("Tüm Yemekler",res.getDrawable(R.drawable.hotel))
24 .setContent(inten);
25 tb.addTab(spec);
26
27 //hotel tab
28 inten = new Intent().setClass(this, contactgroupeinkaufliste.class);
29 spec = tb.newTabSpec("tab2").setIndicator("Yemek Bul",res.getDrawable(R.drawable.wisata))
30 .setContent(inten);
31 tb.addTab(spec);
32
33 //mall tab
34 inten = new Intent().setClass(this, gunun_menusu.class);
35 spec = tb.newTabSpec("tab3").setIndicator("Günün Menüsü",res.getDrawable(R.drawable.mall))
36 .setContent(inten);
37 tb.addTab(spec);
38
39 //restourant tab
40 inten = new Intent().setClass(this, yardim.class);
41 spec = tb.newTabSpec("tab4").setIndicator("Yardım",res.getDrawable(R.drawable.restoran))
42 .setContent(inten);
43 tb.addTab(spec);
44
45 tb.setCurrentTab(0);
46 }
47}

Wei kann ich den Dialog Fenster anzeigen lassen ?
vielen dank für antwort
Eray

Antworten