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"?>
<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>
Es ist ein lineares Layout mit folgenden Komponenten:

  • TextView - enthält einen Text
  • EditText - Eingabefeld für Kennwort
  • Button - der Anmelde-Knopf
  • 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"?>
    <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>
    Lineares Layout mit einer TextView.

    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

    Bookmarken bei: These icons link to social bookmarking sites where readers can share and discover new web pages.
    • del.icio.us
    • Webnews
    • MisterWong
    • Y!GG
    • Linkarena
    • Technorati

    Ähnliche Themen

    Tags: ,

    Leave a Reply