Android Tutorial. Activity Forwarding
Themen: SharedPreferences, OnClickListener, startActivity, Intent, android:password
IDE: Eclipse 3.4.1
Ich versuche mal “Activity Forwarding” an einem einfachen Beispiel zu erklären. Der Begriff hört sich nämlich viel komplexer an, als die Funktionalität, die sich dahinter verbirgt.
Stellen wir uns vor, wir schreiben eine Appikation für Android. Am Start dieser Applikation soll eine Anmeldemaske angezeigt werden. Sobald sich der Benutzer angemeldet hat, soll eine andere Anzeige erscheinen. D.h. ein Wechsel von GUIs ist gefragt. Wie macht man das in Android?
In vielen anderen Programmiersprachen hätten wir zwei Formen gebastelt und die nacheinander angezeigt. Bei Android läuft das ähnlich und doch etwas anders.
XML Layout
Alles fängt mit XML-Layouts. Erstellen wir zuerst unsere Anmeldemaske.
Datei first_layout.xml:
<?xml version="1.0" encoding="utf-8"?>Es ist ein lineares Layout mit folgenden Komponenten:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/first"/>
<EditText android:id="@+id/pass"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_weight="0"
android:password="true"
android:paddingBottom="4dip">
<requestFocus />
</EditText>
<Button android:id="@+id/login"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/forward"/>
</LinearLayout>
Einzig interessant ist die Zeile 14, android:password=”true” bewirkt, dass das Kennwort nicht angezeigt wird.
Die zweite “Form”, die nach der Anmeldung angezeigt werden soll, ist viel einfacher.
Datei second_layout.xml:
<?xml version="1.0" encoding="utf-8"?>Lineares Layout mit einer TextView.
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<TextView
android:id="@+id/login_result"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/second"/>
</LinearLayout>
Quelltext
Jetzt geht es um die Funktionalität. Datei ForwardingTutorial.java:
public class ForwardingTutorial extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.first_layout);
Button goButton = (Button)findViewById(R.id.login);
goButton.setOnClickListener(mGoListener);
}
private OnClickListener mGoListener = new OnClickListener()
{
public void onClick(View v)
{
TextView lPass = (TextView)findViewById(R.id.pass);
SharedPreferences preferences = getSharedPreferences("ForwardingTutorial", 0);
SharedPreferences.Editor editor = preferences.edit();
editor.putString("pass", lPass.getText().toString());
editor.commit();
Intent intent = new Intent();
intent.setClass(ForwardingTutorial.this,
ForwardingSecond.class);
startActivity(intent);
finish();
}
};
}
Zeile 5 - unser Anmeldeformular anzeigen
Zeilen 6, 7 - das Button finden und eine OnClick-Routine anbinden
Zeilen 13 - 17 - das eingegebene Kennwort aus dem Textfeld auslesen, ein Objekt für Einstellungen erstellen, darin das Kennwort speichern
Zeilen 18 - 22 - hier passiert die eigentliche Weiterleitung. Von der Klasse ForwardingTutorial zu der Klasse ForwardingSecond
Spätestens jetzt ist allen klar, dass wir eine zweite Klasse names ForwardingSecond brauchen. Hier ist die. Datei ForwardingSecond.java:
public class ForwardingSecond extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.second_layout);
TextView loginResult = (TextView)findViewById(R.id.login_result);
SharedPreferences preferences = getSharedPreferences("ForwardingTutorial", 0);
String pass = preferences.getString("pass", null);
if (pass != null) {
loginResult.setText("Kennwort: "+pass);
}
else
loginResult.setText("etwas ist hier falsch");
}
}
Zeile 5 - unsere zweite Form anzeigen (second_layout.xml wird geladen)
Zeilen 7, 8 - das Objekt mit gespeicherten Einstellungen holen, daraus das Kennwort auslesen.
Zeile 10 - das Kennwort in der TextView zeigen
AndroidManifest.xml
Damit das ganze überhaupt funktioniert muss die Datei AndroidManifest.xml angepasst werden. Das Eclipse erstellt wird diese Datei automatisch, wir müssen sie nur vervollständigen:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="de.android_telefonie.tutorial.forwarding"
android:versionCode="1"
android:versionName="1.0.0">
<application android:icon="@drawable/icon" android:label="@string/app_name">
<activity android:name=".ForwardingTutorial"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name=".ForwardingSecond">
</activity>
</application>
</manifest>
Zeilen 14, 15 - hier machen wir unsere zweite Activity bekannt.
Quelltext download. Komplettes Eclipse-Projekt





