Alternative zu ToggleButton (Android/Java)

kaoZ

Top Contributor
Hallöchen freunde der Programmierung :)

Ich bin mal wieder auf ein kleines Problem gestoßen , ich würde gerne einen Button erzeugen der beim ersten klick eine Methode aufruft, den Button Text ändert einen Aktion durchführt und darauf beim 2ten Klick eine andere aktion durchführt, hier zu meinem Problem:

Java:
public final class Test extends Activity implements OnClickListener 
{
    private Button btnSwitch;
    private EditText textField;

public void onCreate(Bundle SavedInstanceState)
{
super.onCreate(SavedInstanceState);
setContentView(R.layout.test_layout);

  btnSwitch = (Button)findViewById(R.id.btnswitch);
  btnSwitch.setOnClickListener(this);

  textField = (EditText)findViewById(R.id.textfield);
}
public void onClick(View v)
{
  switch(v.getId())
  {
    case R.id.btnswitch:
        btnswitch.setText("Geänderter Text");
        methodeEins();
    break;
  }

if(textField.getText()=="Beispiel")
{
  methodeZwei();
}
} // onClick Ende

public void methodeEins()
{
  textField.setText("Beispiel");
}

public void methodeZwei()
{
  textField.setText("");
}
} // class Ende

mein Problem ist das er beim Klick , die switch anweisung befolgt, diese durchläuft die methodeEins ausführt und nach dem break; direkt weiter in die IF schleife geht und dann ja schon die Anforderungen erfüllt und mir die den Inhalt der EditTextfelder gleich wieder löscht :lol:..... selbst wenn ich noch zusätzlich einen Int wert setze und diesen über die Methode ändere, oder die If anweisung vor die switch Anweisung setzte ( was dann garnichtmehr funktioniert) funktioniert es nicht , gibt es keine möglichkeit diese Aktionen mit einem Normalen Button durchzuführen (ggf. die onClick mehtode nicht anhand der Id du identifizieren??!!) , oder muss man dafür zwingend auf ToggleButton zurückgreifen ?
 

Gucky

Top Contributor
Du könntest bei edem Klick einen Wert hochzählen und dann zwei if-Anweisungen machen. Die eine greift, wenn, bei einer Division durch zwei, ein Rest vorhanden ist und die andere greift, wenn das nicht der Fall ist.

Gruß
Gucky
 

kaoZ

Top Contributor
ich hatte schon versucht es über einen Int wert der beim ersten aufrufen der methode auf auf 1 gesetzt wird zu regeln allerdings führt das aufrufen der switch schleife dazu das trotzdem die if anweisung danach aufgerufen wird, sonst müsste man es ohne die switch anweisung regeln oder ? bzw ohne die id als identifier ?!
 

Gucky

Top Contributor
ToggleButtons werden eigentlich auch dazu verwendet, um für die Dauer der Altivierung etwas bestimmtes zu tun.

Das die If-Anweisung aufgerufen wird, kommt daher, dass die Methode nicht "beendest" mit dem break sondern nur die switch anweisung. Wenn du aus der Methode herausspringen willst, müsstest du entweder das break mit einem return vertauschen oder die If-Anweisung mit in einen switch case tun.

Außerdem dürfte die erste If-Anweisung nie true ergeben, weil Strings nicht mit dem Binärvergleichsoperator == verglichen werden sondern mit .equals(String str) .
 

kaoZ

Top Contributor
könntest du ein beispiel nennen wie ich eine if anweisung in einer switch case anweisung die sich auf die ID bezieht realisieren kann ?

weil 2 x die id des buttons angeben kann ich ja nicht .

Java:
public void onClick(View v) {

	
		switch(v.getId())
		{
		case R.id.btnswitch:
			btnSwitch.setText("Felder Löschen");
			methodeEins();
			return; // <<---- anstelle des break; springt jetzt aus der switch anweisung ?!
		} 
	
	}
 

Gucky

Top Contributor
Du müsstest einfach die switch Anweisung um einen case erweitern, der den anderen Status der ID behandelt. Ich muss leider gestehen, dass ich nicht weiß, was in so einer ID drin steht oder welche unterschiedlichen Werte sie annehmen kann.

Aber btw werden switch cases eigentlich verwendet, um eben keine If-Anweisung zu benutzen.

Das return kannst du anstelle der if-Anweisung im switch case verwenden. Wenn jetzt die Bedingung des switch cases erfüllt ist, dann wird die if-Anweisung nicht mehr überprüft.

PS: für einen einzigen case nimmt man eigentlich kein switch.
 

kaoZ

Top Contributor
die Id dient als eindeutiger Identifier für ein Objekt, demnach ist der Button an diese Id gebunden und nimmt somit keinen anderen Status an als diesen .

im prinzip müsste ich wissen wie ich es realisieren kann die onClick methode auf den Button anzuwenden, der daraufhin seinen Status ändert ( text / zuweisungs einer Int variable ) eine methode ausführt, und auf erneuten klick auf den gleichen Button ( mit der gleichen Id) eine andere methode ausführt, wenn ich es aber versuche es über die id zu regeln wird immer der gleiche einstiegspunkt gewählt , nämlich der mit der eindeutig zugewiesenen Id.

gibt es eine andere möglichkeit den buttonklick / bzw. den 2ten klick parallel zu der id des buttons zu behandeln ?

würde halt ungern nen extra button einfügen , hab auch schon versucht die editText felder mit einem onFocus wieder in einen leeren zustand zu versetzen , allerdings ist das nicht das was ich möchte , es sollen halt mehrere felder geleert werden über den button der auch die felder zusammenrechnet, nur halt beim 2ten klick .

jemand eine idee ?
 

Gucky

Top Contributor
Die ID könntest du speichern als die ID des Buttons in einer separaten Variable. Immer wenn du die Methode onClick mit dieser ID aufrufst, wird der int einen hochgezählt und der Rest einer Division durch 2 bestimmt. Jenachdem, welcher Rest vorhanden ist, wird die passende Methode ausgeführt (,wofür der switch eher geeignet ist).

Aber es gibt eine viel einfachere Lösung:
Du tust das hochzählen und den switch case in den Actionlisteners eines stinknormalen (j)Buttons. Mkt jedem Klick wird der int einen hochgezählt und es wird der switch case durchlaufen. Jenachdem, welcher Rest vorhanden ist, wird der richtige switch case und folglich auch die richtige Methode aufgerufen.

Deine Lösung zeugt von einem hohen Verständnis von Java, welches dich aber die leichten Lösungen übersehen lässt :D (geht mir aber teilweise genauso ;) )
 

kaoZ

Top Contributor
Das Problem ist das ich die Id nicht einfach in einer Variablen speichern kann ( ich kann zwar die Referenz/variable die auf diese Id verweist speichern, aber nicht die id selbst) da sie keinen Typ besitzt,

funktionieren würde sowas hier ( glaube ich ) :

Java:
private int btnSwitcher = 0;
private Button btnEins;

public void onClick(View v)
{
  if(btnEins.isPressed())
{
  btnSwitcher++; // würde dann bei jedem klick um einen erhöhen
}

}
und dann müsste ich noch eine anweisung erstellen die die Int's aus der variable btnSwitcher behandelt und dementsprechend die methoden aufruft, allerdings hab ich noch keinen schimmer wie ich es handhaben soll ^^:popcorn:

meintest du sowas in der art? manchmal hab ich das gefühl ich mach es mir komplizierter als es ist, aber ich steh halt noch so ziemlich am anfang was die Android programmierung betrifft^^
 
Zuletzt bearbeitet:

kaoZ

Top Contributor
so funktioniert es :)

Java:
@Override
public void onClick(View v)
{
		
  if(btnEins.isPressed())
  {
     btnSwitcher++;
   }
if(btnSwitcher == 1)
  {
     rechnen();
     CharSequence leer = this.getResources().getString(R.string.btnFelderLeeren);
     btnEins.setText(leer);	
		}
if(btnSwitcher == 2)
  {
     CharSequence berechnen = this.getResources().getString(R.string.btnKalorienRechnen);
     btnEins.setText(berechnen);
     textField.setText("");
     btnSwitcher = 0;
   }

}

ob das jetzt die schönste lösung ist wage ich allerdings zu bezweifeln ^^ noch jemand ne idee wie man es in einem ordentlicheren Code verpacken könnte ?
 
Zuletzt bearbeitet:

Gucky

Top Contributor
Deine Lösung funktioniert nur bis man das dritte mal klickt. Der Restoperator ist der hier --> % aber sonst sieht sie gut aus.

Aber eine Sache frage ich mich noch: hat dein Button keinen Actionlistener?
 

kaoZ

Top Contributor
Hab den code komplett fertig, ich setze jetzt einfach die variable btnSwitch nach der zweiten Ausführung wieder auf 0, so funktioniert es auch nach dem 3ten mal :) klappt bestens, der actionListener ist dem Fall der onClickListener der dir onClick Methode aufruft, die wiederum jetzt dem counter hochzählt , wenn ich nachher am Rechner bin Poste ich nochmal den vollständigen code.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
O Alternative zu Stream.forEach() Java Basics - Anfänger-Themen 6
T Alternative für switch case Java Basics - Anfänger-Themen 1
S Input/Output System.out.println - Manipulieren bzw. Alternative..? Java Basics - Anfänger-Themen 2
H Alternative Eingabe Java Basics - Anfänger-Themen 3
N Alternative für mehrdimensionales Array Java Basics - Anfänger-Themen 25
K Alternative zur If-Abfrage Java Basics - Anfänger-Themen 3
P Alternative zu scan.nextLine() Java Basics - Anfänger-Themen 4
N Benötige eine Alternative für einen GOTO Befehl Java Basics - Anfänger-Themen 2
E Brauche eine Antwort zum Thema RegEx ( Alternative zur Lösung auch gesucht ) Java Basics - Anfänger-Themen 5
I Input/Output Alternative zur Serialisierung/ ImageJ Objecte Java Basics - Anfänger-Themen 7
O Alternative zum swing-Timer Java Basics - Anfänger-Themen 5
H Best Practice Alternative Möglichkeit, um Eingaben vorzunehmen Java Basics - Anfänger-Themen 13
M renameTo alternative? Java Basics - Anfänger-Themen 11
A Alternative zum manuellen Swing programmieren?? Java Basics - Anfänger-Themen 4
J alternative zu getText() ? Java Basics - Anfänger-Themen 15
lulas[]args Alternative zu System.err.println(); Java Basics - Anfänger-Themen 5
xehpuk (Sichere) Alternative zu Class.forName() Java Basics - Anfänger-Themen 9
F Alternative zu JoptionPane Java Basics - Anfänger-Themen 7
A Alternative instanceof Java Basics - Anfänger-Themen 3
DStrohma Alternative Darstellung von Paketen in Eclipse Java Basics - Anfänger-Themen 2
S Datentypen LinkedList Konstruktor, add Alternative Java Basics - Anfänger-Themen 2
B Alternative zu einem Array gesucht Java Basics - Anfänger-Themen 3
S Webapplikation welche alternative zu gwt? Java Basics - Anfänger-Themen 2
S Alternative Implementierungen für ActionListener Java Basics - Anfänger-Themen 7
E Strings hochzählen oder elegante alternative? Java Basics - Anfänger-Themen 3
hdi Alternative zu JTextArea? Java Basics - Anfänger-Themen 3
F Java Native Interface alternative Java Basics - Anfänger-Themen 4
M Erneutes Ausführen bestimmter Aktionen (GoTo-Alternative) Java Basics - Anfänger-Themen 6
C Alternative zur Klasse Java Basics - Anfänger-Themen 2
R Alternative zu "Format" in Java 1.4 Java Basics - Anfänger-Themen 3
R String replace nicht verwenden.alternative gesucht Java Basics - Anfänger-Themen 5
V Alternative zu Thread.sleep() ? Java Basics - Anfänger-Themen 6
G Alternative zu Split für 1.3 Java Basics - Anfänger-Themen 3
Naxon89 Threads Android AysncTask => Überprüfen, ob ein Ergebniss schon vorliegt Java Basics - Anfänger-Themen 5
Bene247 Android App (Trinkspiel) Java Basics - Anfänger-Themen 1
N Android Studio notwendig oder sinnvoll? Java Basics - Anfänger-Themen 7
S Gibt es irgendeine Möglichkeit, dies zu tun?(Android Studio) Java Basics - Anfänger-Themen 1
I Java Anwendung auf Android portieren Java Basics - Anfänger-Themen 1
S Android Service ferngesteuert starten Java Basics - Anfänger-Themen 5
A Alternativen zu Android Studio ??? Java Basics - Anfänger-Themen 14
L Android Activity Java Basics - Anfänger-Themen 10
A Wie gebe ich bei android eine string im programm aus? Java Basics - Anfänger-Themen 4
F JAVA oder Android Studios Java Basics - Anfänger-Themen 3
J Datentypen Komm in einem Android Buch mit Java nicht weiter... Java Basics - Anfänger-Themen 7
L Problem mit Android ListView Java Basics - Anfänger-Themen 2
W Pfeiltasten im Android Studio Java Basics - Anfänger-Themen 1
A Erste Schritte Zu Android exportieren Java Basics - Anfänger-Themen 6
M Spracherkennung in Android Java Basics - Anfänger-Themen 3
S Wie entwickelt man eine Library die auf dem JRE und Android laeuft..? Java Basics - Anfänger-Themen 0
A Android-Lib: Sourcecode Generator mittels Annotation Processing Java Basics - Anfänger-Themen 0
A Random String in TextView (Android)? Java Basics - Anfänger-Themen 2
T Android Display in 4 teilen... Java Basics - Anfänger-Themen 3
T Android opengl will net.. Java Basics - Anfänger-Themen 3
T Android App: Laden dauert lange Java Basics - Anfänger-Themen 1
T IllegalStateExeption Android App Java Basics - Anfänger-Themen 19
M Variablen Zähler funktioniert nicht - Android App Java Basics - Anfänger-Themen 3
A Suche Programmierer für Android App Java Basics - Anfänger-Themen 1
K Android vs Java+libgdx Java Basics - Anfänger-Themen 1
K Android 2d engine mit fortlaufendem hintergrund Java Basics - Anfänger-Themen 1
G Android App Java Basics - Anfänger-Themen 3
kaoZ Input/Output Typprüfung (Android ) Java Basics - Anfänger-Themen 1
kaoZ Input/Output Android : Deserialisieren von mehreren Objekten in einer Datei Java Basics - Anfänger-Themen 0
K Erste Schritte Android Recources (MyFirstApp) Java Basics - Anfänger-Themen 4
B Variablen Android: Spinner-Eintrag einen versteckten numerischen Wert zuordnen und Variable übergeben Java Basics - Anfänger-Themen 3
kaoZ Android Programmierung / Erstellen einer neuen Instanz Java Basics - Anfänger-Themen 2
C Android APP - Load More Button und beschleunigung... Java Basics - Anfänger-Themen 2
M javamail android app Java Basics - Anfänger-Themen 3
M Wie lernt man Android Java Basics - Anfänger-Themen 22
J Android R.Java verändern!? Java Basics - Anfänger-Themen 6
J Android app Satzteile Java Basics - Anfänger-Themen 3
S Android fuer Swing-Kenner..? Java Basics - Anfänger-Themen 6
A Android Datenbank gaaanz einfaches Insert geht nicht - warum? Java Basics - Anfänger-Themen 4
A BufferedImage in Android einbinden - Bild spiegeln -wie? Java Basics - Anfänger-Themen 4
eLogic Android - Fehler "stopped unexpectedly" Java Basics - Anfänger-Themen 7
E Android: OnClickListener erkennt Buttons nicht Java Basics - Anfänger-Themen 7
E Buttons in Android generieren? Java Basics - Anfänger-Themen 4
E Welcher Package Name bei Eclipse/Android? Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben