Benötige rat - Button der Zahlen hochzählt

  • 17 Antworten
  • Neuester Beitrag
Diskutiere Benötige rat - Button der Zahlen hochzählt im Android App Entwicklung im Bereich Betriebssysteme & Apps.
A

Android_DEV

Ambitioniertes Mitglied
Guten morgen alle zusammen,

Ich bin zurzeit mit Buttons am rumexperimentieren und möchte, dass wenn man den Button klickt über dem Button ein Feld ist, wo Zahlen hochgezählt werden. Also ein klick=1, ein weitere klick = 1 wird (im Anzeigefeld) ersetzt durch 2, usw.
Ich habe es mit diversen Text Fields probiert aber die sind eher ungeeignet dafür.

Was kann ich anstatt des Text Fields verwenden ?

Danke im voraus :winki:
 
kosmus

kosmus

Erfahrenes Mitglied
ganz einfach. Zum anzeigen eines Strings nimmt man am besten eine TextView.

Code:
	public void zaehlOnClick(View view) {
		TextView tw = (TextView)findViewById(R.id.textView1);
		zaehler++;
		tw.setText(String.valueOf(zaehler));
	}
Aber das ist ein echtes Grundlagenproblem, du solltest dir unbedingt noch ein paar Tutorials durchlesen...
 
A

Android_DEV

Ambitioniertes Mitglied
Danke kosmus :)

Ich hätte mir das etwas schwieriger vorgestellt, daher der Thread.
Ich werde aber deinen rat mit den Tutorials befolgen... ;)

Nur noch eine kurze Frage,

Wird mit der TextView die Zahl auf dem Bildschirm angezeigt?

Lg

Android_DEV :)
 
kosmus

kosmus

Erfahrenes Mitglied
das macht die Methode setText();

In deiner Layout XML definierst du dir einen Button und ein TextView (kannst du ja einfach per Drag&Drop machen). Beim Button musst du dann noch definieren was passieren soll wenn er geklickt wird:
Code:
android:onClick="zaehlOnClick"
und in der Javadatei kommt das das Coding zum Einsatz, das ich eben gepostet habe.

ich versuche die einzelnen Codezeilen hier noch etwas zu erläutern:
Code:
public void zaehlOnClick(View view) {

}
Das ist deine Methode die ausgeführt wird, wenn der Button gedrückt wird (im Parameter view wird übrigens mitgegeben, welcher Button gedrückt wurde, brauchst du aber jetzt nicht auswerten).
Code:
TextView tw = (TextView)findViewById(R.id.textView1);
damit findest du den TextView mit der id textView1 und speicherst ihn in der Variablem tw.

Code:
zaehler++
Hier wird ein Attribut zaehler um 1 hochgezählt. Dieses Attribut musst du dir natürlich außerhalb der methode definieren.

Code:
tw.setText(String.valueOf(zaehler));
und hier passiert jetzt die Magie ;-)
in tw ist der TextView gespeichert und mit setText() kannst du den Text ändern, der neue Text wird dann sofort angezeigt.
String.valueOf() nimmt den zaehler vom datentyp int und erstellt einen String daraus.
 
ui_3k1

ui_3k1

Gesperrt

Jo, so wie es komus schon perfekt beschrieben hat: tv.setText(String.valueOf(zaehler));
Kannst ja mal nachlesen was in dieser Zeile Code Alles passiert, das ist nicht mal wenig... Jedenfalls nicht wenn man es richtig verstanden haben will.
 
A

Android_DEV

Ambitioniertes Mitglied
Ich habe jetzt noch ca 1 Stunde dran gearbeitet, weil ich text.View2 nicht in der XML zu text.View1 umgeändert habe, un ES FUNKTIONIERT :DDDD
Vielen dank Leute es ist wirklich wie ui_3k1 gesagt hat PERFEKT beschrieben.
Ich werde mich weiterhin mit Buttons beschäftigen :D

Mit freundlichsten Grüßen,
-Android_DEV
 
A

Android_DEV

Ambitioniertes Mitglied
Ich habe jetzt den button durch einen imgaebutton ersetzt, weil das besser aussieht.
Dazu habe ich versucht eine Audio Datei mit dem gleichen ImageButton abzuspielen.

Beim code gibt es keine Probleme bis auf..

code:
vuvuneu = (ImageButton) findViewById(R.id.vuvuneu),
vuvuneu.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
MediaPlayer mp = MediaPlayer.create(getApplicationContext(), R.raw.vuvuneu);
mp.start();
}
});

Diese ganze Teil ist rot unterschlängelt.
Was muss ich ändern ?

Danke,
-Android_DEV :)
 
A

amfa

Experte
Das kommt drauf an was Eclipse sagt warum es rot unterschlängelt ist.
Wenn du mit der Maus drauf gehst sollte Eclipse das anzeigen.

Ansonsten müsste links noch ein Icon sein wo du mit der Maus drauf gehen kannst.
 
ui_3k1

ui_3k1

Gesperrt

Android_DEV schrieb:
Ich habe jetzt den button durch einen imgaebutton ersetzt, weil das besser aussieht.
Dazu habe ich versucht eine Audio Datei mit dem gleichen ImageButton abzuspielen.

Beim code gibt es keine Probleme bis auf..

code:
vuvuneu = (ImageButton) findViewById(R.id.vuvuneu),
vuvuneu.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
MediaPlayer mp = MediaPlayer.create(getApplicationContext(), R.raw.vuvuneu);
mp.start();
}
});

Diese ganze Teil ist rot unterschlängelt.
Was muss ich ändern ?

Danke,
-Android_DEV :)
try this..
Code:
    ImageButton vuvuneu;
        vuvuneu = (ImageButton) findViewById(R.id.vuvuneu)[SIZE=4][B][COLOR=Red];[/COLOR][/B][/SIZE] // <-- hier war der Fehler
                vuvuneu.setOnClickListener(new View.OnClickListener() {
                public void onClick(View v) {
                MediaPlayer mp = MediaPlayer.create(getApplicationContext(), R.raw.vuvuneu);
                mp.start();
                }
                });
... Semikolon vergessen :)

Wenns damit immer noch nicht geht ist wahrscheinlich was falsch mit deinen Ressourcen-Dateien...
 
A

Android_DEV

Ambitioniertes Mitglied
Danke, funktioniert :), aber jetzt wird nur noch die Audio-Datei abgespielt.
Im TextView ist die ausgangszahl ( hab ich auf 0 festgelegt ) eingefroren. :/
Ist ein ImageButton vielleicht nicht Multitasking-fähig?
Lg,

Android_DEV :)
 
ui_3k1

ui_3k1

Gesperrt

Wenn du die wirklich auf 0 "festgelegt" hast (also mit static initialisierst), dann kommt der Fehler daher, dass die Variable statisch ist..
Aber da du das wahrscheinlich nicht gemacht hast, wird ein anderer Grund dahinter stecken.
Dass ein ImageButton das Problem hervorruft, erachte ich als eher unwahrscheinlich. Hat es denn mit meinem normalen Button funktioniert?

Wahrscheinlich ist irgendwo ein anderer Fehler drin... bist du dir sicher, dass du die GUI (also die Anzeige) synchron haelst?
 
A

Android_DEV

Ambitioniertes Mitglied
Kannst du das mit der synchronen GUI genauer beschreiben ?
Mit einem normalen Button hatte ich ähnliche Probleme...

Lg,

-Android_DEV
 
A

Android_DEV

Ambitioniertes Mitglied
Ich hab nochmal drüber geschaut und frage mich ob es damit zusammen häng, dass zwei verschiedene Methoden auf den Imagebutton zugreifen. Also die, die den Sound abspielt und die die auf textview die Ziffern hochzählt.
Ich habe es auch mit einem normalen Button probiert aber dort treten die selben Probleme auf.

Lg,

-Android_DEV
 
kosmus

kosmus

Erfahrenes Mitglied
Anders als man es vielleicht von Swing gewohnt ist, wird der Listener mit einem set (nicht add) zugewiesen, das spricht dafür, dass immer nur ein Listener angemeldet werden kann.

Du musst also alle Methoden, die du ausführen willst, in der OnClick-Methode des Listeners aufrufen.
 
A

Android_DEV

Ambitioniertes Mitglied
Danke, ich habe es probiert aber es ändert sich leider nichts.

Hier ist der unveränderte code:

import android.app.Activity;
import android.media.Image;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.ImageButton;
import android.widget.TextView;
public class MainActivity extends Activity {
private int zaehler;
int tw = 1;
public MediaPlayer mp;
ImageButton vuvuneu;


@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
vuvuneu = (ImageButton) findViewById(R.id.vuvuneu);
vuvuneu.setOnClickListener(new View.OnClickListener() {
public void onClick (View v) {
MediaPlayer mp = MediaPlayer.create ( getApplicationContext(),R.raw.vuvuneu);
mp.start();
}
});
}

public void zaehlOnClick(View view) {
TextView tw = (TextView)findViewById(R.id.textView1);
zaehler++;
tw.setText(String.valueOf(zaehler));
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;

}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
}
 
kosmus

kosmus

Erfahrenes Mitglied
ja und jetzt musst du deine onClickZaehl-Methode noch im Listener aufrufen etwa so:

Code:
vuvuneu.setOnClickListener(new View.OnClickListener() {
      public void onClick (View v) {
           MediaPlayer mp = MediaPlayer.create (
           getApplicationContext(),R.raw.vuvuneu);
           mp.start();
           zaehlOnClick(v); // Diese zeile ist neu
      }
});
 
A

Android_DEV

Ambitioniertes Mitglied
Danke :D Klappt wunderbar. (y)

Mfg,

Android_DEV ;)
 
A

Android_DEV

Ambitioniertes Mitglied
Ich habe gerade probiert den Button zu "verschönern".
Also, dass um das Bild ein dicker blauer rand ist.
Das hat auch geklappt, ich musste im drawable-ordner eine neue xml erstellen ich habe sie roundcorner.xml genannt.
Jetzt ist um das Bild jedoch ein transparenter kleiner Rahmen. Ich habe versucht in der activity_main.xml "android:backround" auf "null" zu setzen was ja im normalfall funktioniert aber es tritt ein Fehler auf da "android:backround" schon existiert also mit der roundcorner.xml verknüpft ist.[android:background="@drawable/roundcorner"].

Weiß jemand wie das geht ?

Lg,

-Android_DEV :)