Button switch/case funktioniert nicht

  • 5 Antworten
  • Letztes Antwortdatum
W

WolfCH

Ambitioniertes Mitglied
1
Ich habe schon hier gesucht und ähnliche Threads gefunden, die aber nicht mein Problem lösen können. Ich habe zwei Buttons einer mit der ID btnDB und der andere mit der ID exit.

Die beiden Buttons sind in der gleichen Activity. Der eine soll eine neue Activity öffnen und der andere die App beenden.

Folgendes Problem:
Die App läuft und Eclipse kompiliert auch ohne Fehler.
Klicke ich auf den ersten Button, dann öffnet er die zweite Seite und das klappt wunderbar.

Klicke ich aber nun auf den "Beenden" (exit) Button, dann öffnet er mir trotzdem wieder die zweite Seite anstatt die App zu beenden. Was ist hier falsch? Ich verstehe es grad nicht ;)

Hier mal um was es geht:

Code:
	    //Button-IDs der Varablen zuweisen
		btnButton = (Button)findViewById(R.id.btnDB);
		btnButton.setOnClickListener(this);
		exitButton = (Button)findViewById(R.id.exit);
		exitButton.setOnClickListener(this);

	}

	//Auswahl wenn was geklickt wird
	@Override
	public void onClick(View v) {
	    //Button SWITCH
	     switch (v.getId()) {  
	        case R.id.btnDB:  
	            Intent i = new Intent(MainActivity.this, uwausleseactivity.class);  
	            startActivity(i);  
	            break;  
	            
	        case R.id.exit:  
	            finish();  
	            break;  
	        }  
		
	}


Gruss
Wolf
 
Hi,

versuch mal R neu erstellen zu lassen bzw. das Projekt zu "cleanen".
Wenn es dann noch nicht geht versuch mal statt die Methode finish() aufzurufen
etwas banales wie Log...
Füge mal um alles auszuschließen beim switch/case noch einen default Wert hinzu :D

Mfg

pootney
 
Ich habe einen Default wert hinzugefügt.

Was ich noch anmerken möchte ist, dass wenn die App geöffnet ist und ich nur auf den Beenden Button drücke, dass es dann tadellos funktioniert. Nur wenn ich vorher auf dem Meldebutton war und danach wieder zurück gehe und dann auf beenden klicke, gehts nicht.

Hier der Code von der ersten Activity (nur die Problemzone):

Code:
     switch (v.getId()) {  
	       //Meldebutton
	        case R.id.btnDB:  
	            Intent i = new Intent(MainActivity.this, uwausleseactivity.class);  
	            startActivity(i);  
	            break;  
	         //Email-TextView (Click)
	        case R.id.textView3:
	        	Intent mail = new Intent(Intent.ACTION_VIEW,Uri.parse("mailto:info@scvswitzerland.ch"));
	        	startActivity(mail);
	        	break;
	         //Telefon-TextView (Click)
	        case R.id.telscv:
	         Intent a = new Intent(Intent.ACTION_VIEW, Uri.parse("tel:(+41) 00 000 00 00"));
	         startActivity(a);
	         break;
                //Beenden Button
	        case R.id.exit:  
	        	finish();
	            break;  
	            
	        default:
	        //nix
	        break;
	        }

Und hier der Code von der zweiten Seite (dort existiert im Moment nur 1 Button):
Code:
	Button btnDB_back = (Button)findViewById(R.id.btnDB_back);
                 //Zurückbutton
		btnDB_back.setOnClickListener(new View.OnClickListener()
		{
		    	@Override
		    	public void onClick(View v) {
		    	         // Activity-Aufruf hier rein.
		    		Intent in = new Intent(uwausleseactivity.this,MainActivity.class);
		    	    startActivity(in);
		    		}
		});

Ich habe es auf der zweiten Activity schon mit in.putExtra("v", "null"); versucht um die Variable 'v' für die erste Activity zurückzusetzen. Hat aber nichts gebracht. Sowie auch mit R.id = null oder sonstigem.

Komme zur Zeit auf keinen anderen Nenner.. ;)

Gruss
WolfCH
(Dominic)
 
Was mach ich denn falsch??
Auch meine if-Anweiseungen werden ignoiert.

Ich hab eine AlertBox die nur beim Start der App angezeigt werden sollte und dann nicht mehr. Also hab ich eine variable "var" gesetzt die null ist. Dann eine Abfrage:

if(var == 0) .. AlertBox anzeigen, else: nichts. ;) In der zweiten Activity beim klick auf den Zurückbutton habe ich dann in.putExtra("var","1"); geschrieben dass diese dann nicht mehr 0 ist und somit die AlertBox nicht mehr angzeigt wird.

Funktioniert nicht, der Dialog kommt immer wieder. Ganz abgesehen davon, dass auch die Buttons nicht wie gewollt funktionieren. Der geht immer auf die zweite Seite statt zu beenden. (R.id.exit).

Gruss
WOlf
 
Das liegt daran, dass du in der zweiten Activity nochmal die erste startest, und somit diese ebenfalls auf dem Backstack landet.
Dein Backstack sieht nach dem drücken des Buttons in der zweiten Activity so aus:
A1 -> A2 -> A1

Wenn du nun den Button fürs beenden von A1 drückst, dann landest du logischerweise bei A2, aber nicht bei einer neuen Instanz, sondern bei der vorherigen. Was du möchtest ist wahrscheinlich in A2 beim Button click ein finish aufrufen.

Mach dich vielleicht auch mal mit dem allgemeinen Navigationsprinzip von Android vertraut, mit back, up, start und finish.
Tasks and Back Stack | Android Developers
 
Danke für diesen Link! Hat mir sehr geholfen ;)

Hab es nun hinbekommen, ich musste nur folgenden Flag bei der Instanz in der zweiten Activity setzen:

Code:
in.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

mfg
WolfCH
 
Zurück
Oben Unten