Freitag, 22. November 2013

Android: Zwischen Activities wechseln

Nachdem ich in den vorigen Posts schon ein paar Mal angesprochen habe, dass Android Anwendungen aus Activites aufgebaut sind (genau wie Windows Forms Anwendungen aus Formularen), möchte ich heute zeigen, wie man der Anwendung eine neue Activity hinzufügt, diese aufruft und ihr Daten mitgibt.
Eine neue Activity fügen wir per Datei - Neu - Android Activity hinzu, ich nenne sie hier "SecondActivity.cs". Mit dieser kann nun natürlich genauso verfahren werden wie mit der Hauptactivity.
Es kann also codemäßig ein Layout angelegt werden, oder per axml Datei. Ich wähle hier die zweite Variante, dafür rechtsklicken wir auf Resources - layout und wählen Hinzufügen - Neue Datei - Android Layout. Ich nenne das Layout "Second".
Von der Mainactivity können wir dann die zweite Activity folgendermaßen aufrufen:

var SecondActivity = new Intent(this, typeof(SecondActivity));
StartActivity(SecondActivity);

Optional können wir beim Aufruf Stringparameter übergeben:

SecondActivity.PutExtra("Parameter", "Nachricht von Main");

Der komplette Code der Datei "MainActivity.cs" sieht so aus:

using System;
using Android.App;
using Android.Content;
using Android.Runtime;
using Android.Views;
using Android.Widget;
using Android.OS;

namespace MultipleActivities
{
     [Activity (Label = "MultipleActivities", MainLauncher = true)]
     public class MainActivity : Activity
     {
          protected override void OnCreate (Bundle bundle)
          {
               base.OnCreate (bundle);

               var Layout = new LinearLayout (this);
               Layout.Orientation = Orientation.Vertical;
               var Button1 = new Button (this);
               Button1.Text = "Second starten";

               Button1.Click += delegate {
                    var SecondActivity = new Intent(this, typeof(SecondActivity));
                    SecondActivity.PutExtra("Parameter", "Nachricht von Main");
                    StartActivity(SecondActivity);
               };

               Layout.AddView (Button1);

               SetContentView (Layout);
          }
     }
}

Beim Klick auf den Button wird also die zweite Activity gestartet.
Diese enthält nur ein Textview, der dazugehörige Code der Datei "Second.axml" ist:

<?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"
    android:minWidth="25px"
    android:minHeight="25px">
    <TextView
        android:text="Medium Text"
        android:textAppearance="?android:attr/textAppearanceMedium"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:id="@+id/textView1" />
</LinearLayout>

Der Code der Activity "SecondActivity.cs" ist auch recht kurz, in ihm wird der von der Hauptactivity übergebene Parameter ausgelesen und im Textview dargestellt:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Android.App;
using Android.Content;
using Android.OS;
using Android.Runtime;
using Android.Views;
using Android.Widget;

namespace MultipleActivities
{
     [Activity (Label = "SecondActivity")]              
     public class SecondActivity : Activity
     {
          protected override void OnCreate (Bundle bundle)
          {
               base.OnCreate (bundle);
               SetContentView (Resource.Layout.Second);

               TextView textView1 = FindViewById (Resource.Id.textView1);
               textView1.Text = Intent.GetStringExtra ("Parameter");
          }
     }
}

1 Kommentar:

  1. Hallo!
    Ich habe alles genau so gemacht wie es oben steht.
    Es kommt folgendes bei dieser Zeile:
    var SecondActivity = new Intent(this, typeof(SecondActivity));

    C:\Users\Mathias\Documents\Projects\CSGO\CSGO\MainActivity.cs(50,50): Error CS0246: Der Typ- oder Namespacename 'SecondActivity' konnte nicht gefunden werden. (Fehlt eine Using-Direktive oder ein Assemblyverweis?) (CS0246) (CSGO)

    Könnten Sie mir bitte helfen?

    AntwortenLöschen