Android Development - Grundfunktionen Programmieren: Unterschied zwischen den Versionen

Aus Wikizone
Wechseln zu: Navigation, Suche
Zeile 88: Zeile 88:
  
 
==== ActionBar ====
 
==== ActionBar ====
In der onCreate funktion finden wir eine ActionBar Funktion um den Software Zurückbutton zu setzen. Die ActionBar API ist jedoch erst ab Honeycomb (API Level 11) Verfügbar. Deshalb fragen wir vorher die Version ab und setzen ein SuppressLint Tag (siehe [[Android - Referenz]] ) um Fehlermeldungen von Lint zu verhindern.
+
In der onCreate funktion finden wir eine ActionBar Funktion um den Software Zurückbutton zu setzen. Die ActionBar API ist jedoch erst ab Honeycomb (API Level 11) Verfügbar. Deshalb fragen wir vorher die Version ab und setzen ein SuppressLint Tag (siehe [[Android Development - Referenz]] ) um Fehlermeldungen von Lint zu verhindern.
  
 
<pre>
 
<pre>

Version vom 27. Februar 2013, 08:19 Uhr

Baut auf diesem Artikel auf:

Android Development - User Interface programmieren

Wir haben ein kleines Layout mit einem Textfeld und einem Button. Im Folgenden wollen wir das ganze mit einer zweiten Activity verbinden, die auf die Eingabe reagiert.

onClick Event für den Send Button

activity_main.xml

Attribut hinzufügen:

android:onClick="sendMessage"

Bei Klick auf den Button soll die Methode sendMessage aufgerufen werden. Diese fügen wir in der MainActivity Klasse hinzu. (src/MainActivity.java)

	/** Called when the user clicks the send button **/
	public void sendMessage(View view) {
		// Do something
	}

Dazu muß noch die View Klasse importiert werden.

import android.view.View;

In Eclipse kann man fehlende Klassen einfach mit

Ctrl + Shift + O (PC)
Cmd + Shift + O (Mac)

Wichtig zu wissen ist das die Methode für onClick folgende Eigenschaften hat:

  • public
  • void als Rückgabewert hat
  • Einen View als einzigen parameter hat (dieser enthält das View Objekt, das geklickt wurde)

Intent Binding

Wir möchten als Reaktion auf den Klick eine zweite Activity starten. Dafür gibt es die Intents. die Intention eines Intent ist es einzelne Komponenten zu verbinden. Am häufigsten werden sie dazu eingesetzt eine weitere Activity zu starten.

Man kann sich eine Intent quasi als Kabel zwischen Komponenten vorstellen. So gehts:

in sendMessage() erzeugen wir einen Intent.

Intent intent = new Intent(this, DisplayMessageActivity.class);

Der Konstruktor hat zwei Parameter, es sind quasi die Anschlüsse des Intent.

  • Parameter 1 ist ein Context (Klasse). Quasi der Startpunkt des Intent. Hier können wir this nehmen (die Activity) weil Activity eine Subklasse von Context ist.
  • Parameter 2 ist die Klasse der App Komponente, an die der Intent liefern soll. Quasi der Endpunkt des Kabels. hier ist es die Activity die gestartet werden soll.

Die Klasse DisplayMessageActivity.class gibt es noch nicht. Deshalb meckert Eclipse noch (...cannot be resolved...) Das holen wir gleich nach, aber zuerst erweitern wir die Funktion:

	public void sendMessage(View view) {
		Intent intent = new Intent(this, DisplayMessageActivity.class);
		EditText editText = (EditText) findViewById(R.id.edit_message);
		String message = editText.getText().toString();
		intent.putExtra(EXTRA_MESSAGE, message);
	}

Dazu brauchen wir noch zwei imports:

import android.content.Intent;
import android.widget.EditText;

Mit der putExtra Methode kann der Intent verschiedene Typen von Daten als Key-Value Paare übermitteln. putExtra(key,value) Die Konstante EXTRA_MESSAGE definieren wir gleich.

Mit findViewById können wir das Text-View-Objekt holen und danach die Textnachricht auslesen.

Die Konstante definieren wir in der MainActivity Klasse

 public class MainActivity extends Activity {
	public final static String EXTRA_MESSAGE = "de.webmynet.firstapp.MESSAGE";
 ...

Es ist gut den Package Prefix der App für die intent extras zu nehmen. Das sorgt dafür, daß sie nur einmal vorkommen und nicht mit andern Apps interagieren.

Zweite Activity starten

Wir fügen in sendMessage noch die Zeile:

startActivity(intent); 

ein. In der Methode startActivity wird der Intend übergeben und das System startet eine Instanz der in Intent definierten Activity.

Mit Eclipse legen wir ganz einfach eine neue Activity an. sie sollte im gleichen Package liegen wie die MainActivity.

New (das Icon) > Android > Android Activity
Blank Activity
Project: FirstApp (oder wie die App heißt)
Activity Name: DisplayMessageActivity (s.o.)
Layout Name: activity_display_message
Title: My message
Hierarchial Parent: de.webmynet.firstapp.MainActivity
Navigation Type: None

Man kann die Datei src/DisplayMessageActivity.java natürlich auch von Hand anlegen. Eclipse legt allerdings schon vorab das Grundgerüst mit imports und einigen Funktionen (onCreate, onCreateOptionsMenu, onOptionsItemSelected() an.

Die Funktion onCreateOptionsMenu() brauchen wir nicht und löschen diese.

Die Funktion onOptionsItemSelected() behandelt die Android Zurück-Taste. Diese lassen wir erst mal.

ActionBar

In der onCreate funktion finden wir eine ActionBar Funktion um den Software Zurückbutton zu setzen. Die ActionBar API ist jedoch erst ab Honeycomb (API Level 11) Verfügbar. Deshalb fragen wir vorher die Version ab und setzen ein SuppressLint Tag (siehe Android Development - Referenz ) um Fehlermeldungen von Lint zu verhindern.

        // Show the Up button in the action bar.
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB){
        	getActionBar().setDisplayHomeAsUpEnabled(true);
        }