Androidの Fragment
は subactivity
の一種です。1つの activity
は複数の Fragment
をホストすることができます。例えば、1つのメインページとサブページが必要な場合は、Fragments
を考える必要があります。興味深いのは、Fragments
は独自のライフサイクルを持っているので、activity
にあまり頼らなくても、独立した作業方法を提供してくれることです。
このチュートリアルでは、Kotlin Androidをベースにした簡単なHow To例で、Fragments
の使い方を説明します。
例 1: Kotlin Android - Activity
に Fragment
を表示する
アクティビティ」にはボタンがあり、クリックすると「フラグメント」を表示します。以下は、作成されたデモ画像です。
ステップ 1: 依存関係
このプロジェクトでは、サードパーティの依存関係は必要ありません。
ステップ2: レイアウトの設計
フラグメント用のレイアウトと、メインのアクティビティ用のレイアウトの2つが必要です。
(a). fragment.xml
を作成します。
これは fragment
のレイアウトです。これには単にテキストが含まれます。
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@+id/txt_fragment"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="top|left"
android:text="@string/str_fragment"
android:textColor="#2a2a2a"
android:layout_margin="10dp"
android:padding="10dp"/>
</LinearLayout>
(b). activity_main.xml
(アクティビティのメインとなるレイアウトです。
これはメインの activity
のレイアウトです。ボタンと framelayout
が含まれています。ユーザーがボタンをクリックすると、fragment
が初期化され、framelayout
の中にレンダリングされます。
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity"
android:orientation="vertical">
<Button
android:id="@+id/btn_show"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="0.9"
android:text="@string/show"/>
<FrameLayout
android:id="@+id/fragment_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="0.1">
</FrameLayout>
</LinearLayout>
ステップ 3: Fragment
の作成
3つ目のステップは、実際の Fragment
を作成し、そのレイアウトを膨らませることです。フラグメントは、
androidx.fragment.app.Fragmentクラスを拡張して作成します。フラグメントは
onCreateView() をオーバーライドすることで作成され、
フラグメント` のレイアウトから作成されたビューオブジェクトを返します。
以下がそのコードです。
Fragment_one.kt
。
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.Toast
import androidx.fragment.app.Fragment
import kotlinx.android.synthetic.main.fragment.*
class Fragment_one : Fragment() {
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
return inflater.inflate(R.layout.fragment,container,false)
}
override fun onActivityCreated(savedInstanceState: Bundle?) {
super.onActivityCreated(savedInstanceState)
txt_fragment.setOnClickListener {
Toast.makeText(activity,"text fragment",Toast.LENGTH_SHORT).show()
}
}
}
ステップ 4: MainActivity
の作成
これは、フラグメント
をホストするアクティビティ
です。フラグメント」は単独では存在せず、「アクティビティ」によってホストされます。1つの activity
が複数の fragment
をホストすることができます。
フラグメントを
activity の中に表示するには、
Fragment Transaction と呼ばれるものを実行する必要があります。このようなトランザクションには、
fragmentの追加、
fragmentの削除、
fragmentの置き換えなどがあります。今回の例では、
framelayoutを
fragment`で置き換えることに興味があります。そのためのコードは次のとおりです。
fun showFragment(fragment: Fragment_one){
val fram = supportFragmentManager.beginTransaction()
fram.replace(R.id.fragment_main,fragment)
fram.commit()
}
以下は、この activity
の完全なコードです。
MainActivity.kt
。
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import kotlinx.android.synthetic.main.activity_main.*
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
btn_show.setOnClickListener {
val fragment = arb.test.fragment.Fragment_one()
showFragment(fragment)
}
}
fun showFragment(fragment: Fragment_one){
val fram = supportFragmentManager.beginTransaction()
fram.replace(R.id.fragment_main,fragment)
fram.commit()
}
}
実行
プロジェクトを実行してみましょう。
参考にしてください。
以下のコードをダウンロードしてください。
No. | Link |
---|---|
1.|ダウンロード コード||2.|フォロー | |
2.|フォローコードの作者 |