■ はじめに
https://dk521123.hatenablog.com/entry/2013/09/25/002349
の続き。 ボタン押下イベントの後は、画面遷移について、学ぶ。
■ 画面遷移をするには...
色々な方法があると思うが、今回は、以下の方法について扱う 【1】Intentを利用する 【2】Kotlinライブラリ Anko を利用する
Anko について
* Kotlinライブラリ Anko を利用する方法は、 Anko が非推奨になっている...
https://github.com/Kotlin/anko/blob/master/GOODBYE.md
【1】 Intentを利用する
Intent(インテント)とは?
* アクティビティなどが、他のアクティビティやアプリケーションなどと 情報のやり取りを行うためのクラス
サンプル / Kotlin
デザイン部
* 画面を追加する([File]-[New]-[Activity]-[Empty Activity]で追加) + 「activity_main.xml」(メイン画面) + 「activity_sub1.xml」 (サブ画面) * 書く画面に button x 1を追加
プログラム部 / MainActivity.kt
import android.content.Intent import androidx.appcompat.app.AppCompatActivity import android.os.Bundle import android.widget.Toast import kotlinx.android.synthetic.main.activity_main.* import java.util.* class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) // ★ここ★ button.setOnClickListener { val intent1 = Intent( this, SubActivity1::class.java) startActivity(intent1) } } }
補足:ボタン・OnClickプロパティ
* ボタンのみ、OnClickプロパティに指定したメソッドから 以下のようにも書ける
サンプル
import android.content.Intent import androidx.appcompat.app.AppCompatActivity import android.os.Bundle import android.view.View import android.widget.AbsListView import android.widget.Toast import kotlinx.android.synthetic.main.activity_main.* import java.util.* import com.dk.myfirstapplication.SubActivity1 as SubActivity11 class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) } // ★デザインで onClickプロパティに「onClick」を追加しておく ★ fun onClick(view: View) { val intent1 = Intent( this, SubActivity11::class.java) startActivity(intent1) } }
サンプル / Java
デザイン部
* 画面を追加する + 「activity_main.xml」(メイン画面) + 「activity_sub.xml」 (サブ画面) * 書く画面に button x 1を追加
プログラム部 / MainActivity.java
package com.example.androidhelloworld; import android.os.Bundle; import android.app.Activity; import android.content.Intent; import android.view.Menu; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; public class MainActivity extends Activity implements OnClickListener { private Button button1; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); this.button1 = (Button) findViewById(R.id.button1); this.button1.setOnClickListener(this); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; } @Override public void onClick(View v) { switch (v.getId()) { case R.id.button1: // インテントのインスタンス生成 Intent intent = new Intent(MainActivity.this, SubActivity.class); // 次画面のアクティビティ起動 startActivity(intent); break; } } }
プログラム部 / SubActivity.java
package com.example.androidhelloworld; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.view.Menu; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; public class SubActivity extends Activity implements OnClickListener { private Button button1; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_sub); this.button1 = (Button) findViewById(R.id.button1); this.button1.setOnClickListener(this); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; } @Override public void onClick(View v) { switch (v.getId()) { case R.id.button1: // インテントのインスタンス生成 Intent intent = new Intent(SubActivity.this, MainActivity.class); // 次画面のアクティビティ起動 startActivity(intent); break; } } }
その他 / AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.androidhelloworld" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="18" /> <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name="com.example.androidhelloworld.MainActivity" 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=".SubActivity" android:label="@string/app_name"/> <!-- ↑追加行↑ -> </application> </manifest>
【2】 Ankoを利用する
* たった一行「startActivity<【移動したクラス】>()」で済む
初期設定
[1] 「./build.gradle」に「ext.anko_version = '【バージョン ※】'」を追記し、 「./app/build.gradle」に「implementation "org.jetbrains.anko:anko:$anko_version"」を追記する ※ 【バージョン】は、以下のサイトから最新版を確認(今回は「0.10.5」)
https://github.com/Kotlin/anko
[2] Android Studioの[File]-[Sync Project with Gradle Files]を選択し、 Anko をダウンロードする
./build.gradle
buildscript { ext.kotlin_version = '1.2.50' ext.anko_version = '0.10.5' // ★ Add ★
./app/build.gradle
implementation 'com.android.support.constraint:constraint-layout:1.1.3' implementation "org.jetbrains.anko:anko:$anko_version" // ★ Add ★
サンプル / Kotlin
デザイン部
* 画面を追加する + 「activity_main.xml」(メイン画面) + 「activity_sub.xml」 (サブ画面) * 書く画面に button x 1を追加
プログラム部 / MainActivity.kt
import android.support.v7.app.AppCompatActivity import android.os.Bundle import kotlinx.android.synthetic.main.activity_main.* import org.jetbrains.anko.startActivity class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) moveSubButton.setOnClickListener { // ★ここに注目★ startActivity<SubActivity>() } } }
プログラム部 / SubActivity.kt
import android.support.v7.app.AppCompatActivity import android.os.Bundle import kotlinx.android.synthetic.main.activity_sub.* import org.jetbrains.anko.startActivity class SubActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_sub) moveMainbutton.setOnClickListener { // ★ここに注目★ startActivity<MainActivity>() } } }
参考文献
【1】 Intentを利用する
http://androidhacker.blog94.fc2.com/blog-entry-24.html
http://androidhacker.blog94.fc2.com/blog-entry-26.html
http://wiki.livedoor.jp/moonlight_aska/d/%B2%E8%CC%CC%A4%F2%C1%AB%B0%DC%A4%B9%A4%EB
http://www.techfirm.co.jp/lab/android/transition.html
関連記事
ボタンイベントを処理するには
https://dk521123.hatenablog.com/entry/2013/09/25/002349
別画面への値の受け渡し
https://dk521123.hatenablog.com/entry/2013/09/27/230328
スワイプして 画面遷移 をするには
https://dk521123.hatenablog.com/entry/2019/09/30/020307