くうと徒然なるままに

モバイルアプリを作りながらバックエンドも作っています。

Xamarin.Android で Intent を使い画面遷移する

自己紹介

初めまして、大学一年生のくぅと言います。 C# と Xamarin が好きです。 まだまだ未熟ですが、色々吸収していきます。

やっていくこと

Xamarin.AndroidIntent を使って画面遷移する

方法

普通のAndroidの開発で使うように Intent を利用して画面遷移等を行います。

サンプルコード

画面を遷移するボタンを設置

遷移元の画面に遷移するためのボタンを設置すると、以下のようになると思います。 遷移元の画面を定義してあるファイルはResources/layout/Main.axml に配置してあります。 また、遷移元の画面は、MainActivity.cs というクラスファイルと紐づけてあります。

f:id:kuxumarin:20161230224653j:plainf:id:kuxumarin:20161230224658j:plain

Main.axml

<?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">
    <Button
        android:id="@+id/myButton"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="@string/hello" />
</LinearLayout>

MainACtivity.cs

using Android.App;
using Android.Content;
using Android.Widget;
using Android.OS;

namespace App1.Droid
{
    [Activity (Label = "App1.Droid", MainLauncher = true, Icon = "@drawable/icon")]
    public class MainActivity : Activity
    {
        int count = 1;

        protected override void OnCreate (Bundle bundle)
        {
            base.OnCreate (bundle);

            // Set our view from the "main" layout resource
            SetContentView (Resource.Layout.Main);

            // Get our button from the layout resource,
            // and attach an event to it
            Button button = FindViewById<Button> (Resource.Id.myButton);
            
            button.Click += delegate {
                var intent = new Intent(this,typeof(Activity1));
                StartActivity(intent);
            };
        }
    }
}

遷移先の画面の作成

遷移先の画面は、テキストを表示するだけのシンプルな形にしてあります。 画面定義ファイルは、Resources/layout/layout1.axml です。 画面定義ファイルは一応、Activity1.cs にしてあります。

layout1.axml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:minWidth="25px"
    android:minHeight="25px">
    <TextView
        android:text="2枚目の画面"
        android:textAppearance="?android:attr/textAppearanceLarge"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/textView1" />
</LinearLayout>

Activity1.cs

using Android.App;
using Android.OS;

namespace App1.Droid
{
    [Activity(Label = "Activity1")]
    public class Activity1 : Activity
    {
        protected override void OnCreate(Bundle savedInstanceState)
        {
            base.OnCreate(savedInstanceState);

            SetContentView(Resource.Layout.layout1);
        }
    }
}

ソースコードのポイント解説

個人的にはまった個所は、Intent クラスのインスタンスを作成するときの第二引数に渡すクラスを.axml の方を渡すと勘違いしていた点です。

Intent の使い方です。

// Intent のインスタンスを作成。この時の第二引数に遷移先のクラス(.csの方)を渡す
var intent = new Intent(this,typeof(Activity1));
// StartACtivity メソッドを使いインテントを起動する。
StartActivity(intent);

まとめ

Android での開発と同じようにIntent を使えることが分かった

.NET開発テクノロジ入門2016年版Visual Studio 2015対応版

.NET開発テクノロジ入門2016年版Visual Studio 2015対応版