Problem mit Buttons

N

nexalaxy

Neues Mitglied
0
Hallo,
ich möchte gerne (später mal) ein Spiel für mein Handy (SG Nexus, Android 4.2.1) programmieren.
Java kann ich halbwegs und der xml-Syntax ist mir auch bekannt.
Ich bin erstmal klein angefangen und habe das "MyFirstApp-Tutorial" von der Google-Seite (Building Your First App | Android Developers) nachprogrammiert.
Das hat auch alles geklappt. Da hab ich mir gedacht, was kannste jetzt machen und bin auf die Idee gekommen, einen "einfachen Formelrechner" zu programmieren.
Erstmal gibt es nur eine Formel - die zur Berechnung des Flächeninhalts eines Rechtecks - und bei der sollen halt die Werte a und b durch ein EditText-Textfeld eingelesen werden und nachher das Ergebnis ausgegeben werden.
Das ganze sieht bis jetzt so aus: http://stefan11.bplaced.net/scr.png
Meine Frage ist, wie kann ich das am besten machen?
Also wie krieg ich das hin, dass das Ergebnis nach dem Knopfdruck hinter dem Gleichzeichen steht? Was muss ich dazu in die onClick-Methode des Buttons schreiben?
Hier mal der Quelltext:
MainActivity.java
Code:
package com.example.einfacherformelrechner;

import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;

public class MainActivity extends Activity {

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.activity_main, menu);
		return true;
	}
	
	public void calculate() {
		
	}

}
activity_main.xml
HTML:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/description" />
    
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/flaecheninhalt" />
    
    <LinearLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal" >
    	
    	<EditText android:id="@+id/param_a"
     	   android:layout_weight="1"
     	   android:layout_width="wrap_content"
     	   android:layout_height="wrap_content"
     	   android:hint="@string/param_a" />
    	<TextView
    	    android:layout_width="wrap_content"
    	    android:layout_height="wrap_content"
    	    android:text="@string/punkt_fuer_multiplikation" />
   	 	<EditText android:id="@+id/param_b"
     	   android:layout_weight="1"
     	   android:layout_width="wrap_content"
     	   android:layout_height="wrap_content"
     	   android:hint="@string/param_b" />
    	<TextView
     	   android:layout_width="wrap_content"
     	   android:layout_height="wrap_content"
     	   android:text="@string/gleichzeichen" />
    	<TextView
     	   android:layout_width="wrap_content"
     	   android:layout_height="wrap_content"
     	   android:text="@string/ergebnis" />
    </LinearLayout>

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/calc"
        android:onClick="calculate" />

</LinearLayout>
strings.xml
HTML:
<?xml version="1.0" encoding="utf-8"?>
<resources>

    <string name="app_name">Einfacher Formelrechner</string>
    <string name="menu_settings">Settings</string>
    <string name="description">Das ist ein Programm, das Formeln anwenden kann. Geben Sie die entsprechenden Werte eine und Sie erhalten auf Knopfdruck ein Ergebnis.</string>
    <string name="gleichzeichen">=</string>
    <string name="punkt_fuer_multiplikation">*</string>
    <string name="param_a">a</string>
    <string name="param_b">b</string>
    <string name="calc">Ausrechnen!</string>
    <string name="ergebnis"></string>
    <string name="flaecheninhalt">Flächeninhalt eines Rechteckes (A=a*b)</string>

</resources>
 
Im XML musste der TextView Ergebnis erstmal ne id verpassen damit du sie im Java Code findest.

android:id="@+id/ergebnis"

Im Java Code


public TextView btnErgebnis; --> Variable erstellen für TextView.

btnErgebnis = (TextView) findViewById(R.id.ergebnis); --> In der onCreate Methode die Variable an das TextView binden.

btnErgebnis.setText("" + ergebnis); --> In der onClick Methode das Ergebnis in die TextView schreiben.

Vielleicht sollteste aber erstmal die Rechnung schreiben weil da gibts auch einiges zu beachten. Zum Beispiel musste EditText beim klicken überprüfen ob was eingegeben wurde sonst stürzt dir die App ab wenn du das Ergebnis anzeigen willst.

Edit: Achja du musst die Methode calculate onClick (View v) { /* deine Rechnung*/} nennen
 
Zuletzt bearbeitet:
Auch darauf achten, das die Methode setText() der TextView ein String verlangt.

Also am besten dein Ergebnis mit toString() umwandeln.

Beste Grüße
 
Deswegen hab ich "" + ergebnis geschrieben dann kann man sich das sparen. Aber gute info ;)

Gesendet von meinem Nexus 4 mit Tapatalk 2
 
Ups, habe ich in dem Kontext völlig überlesen. Danke für deinen Hinweis, hast natürlich recht.
 
Ich vermisse wirklich MVVM und zugehöriges Data Binding aus .NET sowie XAML.

Android ist hier so dermaßen umständlich.
Hat man mal Apps / Programme für WPF usw. gemacht fühlt man sich mit Android gerade was die UI betrifft in die Steinzeit katapultiert.
 
Okay, sorry für die späte Rückmeldung, aber habe jetzt mal versucht das umzusetzen:

MainActivity.java:
Code:
package com.example.einfacherformelrechner;

import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
import android.widget.TextView;

public class MainActivity extends Activity {

	public TextView btnErgebnis;
	public double a;
	public double b;
	public double ergebnis;
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		btnErgebnis = (TextView) findViewById(R.id.ergebnis);
		a = (double) findViewById(R.id.param_a);
		b = (double) findViewById(R.id.param_b);
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.activity_main, menu);
		return true;
	}
	
	public void calculate(View v) {
		ergebnis = a*b;
		btnErgebnis.setText("" + ergebnis);
	}

}

Gibt 2 Fehler bei der Implementierung von a und b in der onCreate-Methode..
Für das mit dem Prüfen ob was geschrieben wurde habe ich schon eine Idee, aber das kommt später. ;)
 
Kein Wunder, du willst ja auch nen TextView / TextEdit, was auch immer einfach casten. Caste es zuerst mal zu nem TextView/TextEdit, dann greifst du auf den String im Textfeld zu und diesen castest du dann in nen Double Wert.
 
So einfach wie du denkst geht das leider nicht.

Du musst erstmal wie bei deinem Ergebnis eine Variable erstellen für die EditText Felder.

z.B. public EditText textA;

Dann in der OnCreate Methode die Variable an die View binden.

textA = (EditText) findViewById(R.id.param_a);

In der OnClick Methode musste dann per getText() den textA abfragen. Da dieser aber ein String is muss du ihn in double formen. Das sollte damit funktionieren. Bin mir grad net sicher aber denk das funktioniert. Ansonsten Google mal ;)

a = Double.parseDouble(textA.getText().toString());

Jetzt kannste mit Variable a rechnen. Das gleiche mit b und es sollte gehen.

Zwei tipps noch.

Das überprüfen auf Eingabe funktioniert auch mit .getText().toString(); und einem Vergleich

Ansonsten erkunde dich mal wie man die Tastatur nur auf Zahlen einstellt bei einem Edit Text. Wird in der XML eingestellt bei dem jeweilige EditText. Weil sonst kann man ja buchstaben eintippen ;)
 
Dankeschön, so funktioniert's. :)
 

Ähnliche Themen

MES
Antworten
10
Aufrufe
819
MES
MES
A
  • AnimaAngelo85
Antworten
1
Aufrufe
336
swa00
swa00
A
Antworten
3
Aufrufe
683
swa00
swa00
Zurück
Oben Unten