目次
概要
Activityへ画面遷移をする時はActivityを使ってIntentオブジェクトを作成する。
そして、startActivityメソッドを用いて画面遷移をすることができる。
Intentのオブジェクトの第一引数はActivityならgetApplication()、Fragmentならcontextを設定する。
ソースコード(Activity→Activity)
.ktファイル
MainActivity.kt
package com.seeking_star.test
import android.content.Intent
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.widget.Button
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
supportActionBar?.setDisplayHomeAsUpEnabled(false)
supportActionBar?.title = "MainActivity"
findViewById<Button>(R.id.button).setOnClickListener {
startActivity(Intent(getApplication(), SubActivity::class.java))
overridePendingTransition(android.R.anim.fade_in, android.R.anim.fade_out)
}
}
}
KotlinSubActivity.kt
package com.seeking_star.test
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import com.seeking_star.test.ui.main.SubFragment
class SubActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_sub)
supportActionBar?.setDisplayHomeAsUpEnabled(false)
supportActionBar?.title = "SubActivity"
if (savedInstanceState == null) {
supportFragmentManager.beginTransaction()
.replace(R.id.container, SubFragment.newInstance())
.commitNow()
}
}
}
Kotlin.xmlファイル
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity" >
<Button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:text="Button" />
</FrameLayout>
XMLactivity_sub.xml
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".SubActivity" />
XMLデモ動画
ソースコード(Fragment→Activity)
.ktファイル
MainActivity.kt
package com.seeking_star.test
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import com.seeking_star.test.ui.main.MainFragment
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
if (savedInstanceState == null) {
supportFragmentManager.beginTransaction()
.replace(R.id.container, MainFragment.newInstance())
.commitNow()
}
}
}
KotlinKotlin
package com.seeking_star.test.ui.main
import android.content.Intent
import androidx.lifecycle.ViewModelProvider
import android.os.Bundle
import androidx.fragment.app.Fragment
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import com.seeking_star.test.R
import com.seeking_star.test.SubActivity
class MainFragment : Fragment() {
companion object {
fun newInstance() = MainFragment()
}
private lateinit var viewModel: MainViewModel
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
viewModel = ViewModelProvider(this).get(MainViewModel::class.java)
// TODO: Use the ViewModel
}
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View {
var view = inflater.inflate(R.layout.fragment_main, container, false)
var intent = Intent(context, SubActivity::class.java)
startActivity(intent)
activity?.overridePendingTransition(android.R.anim.fade_in, android.R.anim.fade_out)
return view
}
}
KotlinSubActivity.kt
package com.seeking_star.test
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import com.seeking_star.test.ui.main.SubFragment
class SubActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_sub)
supportActionBar?.setDisplayHomeAsUpEnabled(false)
supportActionBar?.title = "SubActivity"
if (savedInstanceState == null) {
supportFragmentManager.beginTransaction()
.replace(R.id.container, SubFragment.newInstance())
.commitNow()
}
}
}
Kotlin.xmlファイル
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity" >
</FrameLayout>
XMLfragment_main.xml
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/main"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".ui.main.MainFragment">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal"
android:layout_centerHorizontal="true"
android:gravity="center">
<Button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:text="Button" />
</LinearLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
XMLactivity_sub.xml
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".SubActivity" />
XML詳細
overridePendingTransitionメソッドを使用することで画面遷移する際のアニメーションを設定できる。
また、putExtraメソッドなどを使用することでActivity間でデータの受け渡しもできる。
また、前の画面に戻る時は「finish()」メソッドを呼び出せばいい。