Kotlin+RecyclerView+FragmentでAndroid用アプリを開発している方向け。
どうやってrecyclerViewで画面遷移を実装すれば良いのか分からない人の役に立てば幸いです。
この記事は以下のような方を対象者としています。
- Kotlinでアプリ開発を行なっている方
- RecyclerViewとFragmentで一覧画面を作っている方
- 一覧画面->詳細画面の実装が分からない方向け
目次
前置き: 僕のアプリ開発での副業について
これまで僕は合計30個ほど個人で作ったAndroidアプリをリリースしました。
そのほとんどはツール系やゲーム系アプリです。 (開発言語はJava, C#です。)
これまで30個ほどアプリを開発しましたが、副収入としては合計で1,000円くらいしか年間利益が出ていません。
僕のアプリ開発の失敗談、なぜiOSアプリではなくAndroidアプリ開発がおすすめなのかについて
詳しくは下記の記事で解説しているのでそちらをご覧いただけますと幸いです。😅
画面遷移のロジックはどこで処理する?
RecyclerView+Fragmentで画面遷移を行う場合にはAdapterのonBindViewHolder内に画面遷移の処理を作る必要があります。
このonBindViewHolderはリストアイテムごとのデータ情報を保持する役割を持ちます。
そのためリストアイテムをクリックした際の挙動等もこのonBindViewHolder内で実装できます。
こちらがAdapter.ktのコード例です。
処理詳細についてはおって説明していきます。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
class Adapter (var context: Context, var arrayList: ArrayList<DataList>) : RecyclerView.Adapter<Adapter.ItemHolder>() {
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemHolder {
val itemHolder = LayoutInflater.from(parent.context).inflate(R.layout.list_item, parent, false)
return ItemHolder(itemHolder)
}
override fun getItemCount(): Int {
return arrayList.size
}
override fun onBindViewHolder(holder: ItemHolder, position: Int) {
holder.itemView.setOnClickListener(object : View.OnClickListener {
override fun onClick(v: View?) {
val activity = v!!.context as AppCompatActivity
val detail = Detail()
//list->detailにactivity上に表示されているfragmentを切り替える
activity.supportFragmentManager.beginTransaction().replace(R.id.container,detail).addToBackStack(null).commit()
}
})
}
}
各アイテムリストのクリックを検知するならItemHolder.itemViewを使う
RecyclerViewはアイテム一覧画面を作るために使われます。
その際にリスト画面上のアイテムをクリックしたらアイテム詳細画面へ遷移する挙動を実装するためにはItemHolderを使います。
このItemHolder.itemViewにsetOnClickListenerを設定することでリスト画面上のアイテムをクリックした際の挙動を設定できます。
1 |
|
Kotlin+RecyclerView+Fragmentで実装する際の注意点
KotlinでRecyclerViewとFragmentを使って画面遷移を実装する場合以下の2点に注意してください。
- 画面遷移はActivityではなくAdapter上で行う
- activity.supportFragmentManager.beginTransaction().replace()関数の引数に注意!
画面遷移はActivityではなくAdapter上で行う
FragmentはActivityの上で動作します。
Activityの上でListFragmentとDetailFragmentの表示を切り替えるイメージです。
Fragmentの切り替えを行うにはAdapter上で画面切り替えの処理を書く必要があります。
なぜならアイテムクリック検知がAdapter上でしかできないからです。
そのためAdapter.kt内でクリック検知->DetailFragmentへ画面遷移のロジックを実装する必要があります。
画面遷移を行うreplace()関数の引数に注意!
Fragmentで画面遷移を行う場合はactivityとDetailFragment(遷移先Fragment)をsetOnClickLister内で定義する必要があります。
そしてsupportFragmentManagerを使う必要があります。
まずは下記コードをご覧ください。
1 |
|
画面遷移で使われるコードの解説
まずactivity上でfragmentは動作するため取得したactivityからsupportFragmentManagerにアクセスします。
次にfragment間での遷移処理を行うための関数beginTransaction()にアクセスします。
続いてreplace()関数は現在表示されているFragmentのxmlファイルを削除し、遷移先のFragmentを追加するという処理になります。
つまり、引数として渡す値は以下の通りでなければいけません。(ここめっちゃ重要です。)
1 |
|
.addToBackStack(null)はandroid端末のバックボタンを押した際に前の画面に戻すために必要な処理です。
.commit()でfragment切り替えの処理を実行します。
ちなみにリスト画面のxmlのidとは以下のような感じです。
注意するのはreplace()関数の第一引数で渡すのはlayoutではなくidなところです。
1 |
|
さいごに
ここまでお読みいただきありがとうございました。
僕のブログサイト「kzy.tech〜日本脱出のための教科書〜」がどのようなサービスで作られているかが気になる方は以下別記事にてご説明していますので、ご覧いただけますと小躍りして喜びます💃
また、海外移住の 英語とプログラミングを習得することを推奨しています。
これは私の経験則から言えることですが、上記二つのスキルがあれば海外移住は絶対に実現できます。
以下に僕が実際に使って効率よくプログラミング学習ができるおすすめサービスを載せます😌
速習!おすすめプログラミング勉強法【Udemy】
いくつかプログラミング学習サービスを利用しましたが、一番効率よく勉強できると感じたのはUdemyでした。
Udemyでは動画での説明や解説等もあり親切で、学習教材も豊富にあることから プログラミング初学者の方が短期間でエンジニアを目指したいのであれば、非常に良い教材だと思います。
ちなみに私は文系卒で社会人になってから独学でudemyを使ってプログラミングの勉強をして、実際にエンジニアとして採用されました
Udemyのコースは1つ1,000円ほどなので、ITの参考本を一冊(3,000円)を買うよりもUdemyのコースを購入する方が安い上により効率的にプログラミングを勉強できると思います。
世界最大級のオンライン学習サイトUdemy
また、別記事にてダナンでの生活やIT関連についても記事を書いていますのでクリックいただけると嬉しくて踊ります💃