こんにちは。miyagawaです。
RecyclerViewを使ってリスト表示をしているのですが、いくつか詰まった点があったので備忘録としてまとめたいと思います。
かなり基礎的なものですが、なんどもつまづいてしまうと時間のロスだな、と感じています。
今回もKotlinで書いていきます。
gradle(app)ファイルにRecyclerViewの設定を追記します。
dependencesの中に追記してください。
dependencies { ... implementation 'androidx.recyclerview:recyclerview:1.0.0' // 追記 ... }
まずはMainActivity
のレイアウトにRecyclerView
を追加します。
先ほどのgradleファイルに設定を追加していないとエラーが出るのでご注意ください。
次に、RecyclerView
の中身(1行分)のレイアウトファイルを作成します。
ここで注意するべき点は、LinearLayoutを必ずルートのレイアウトとして使用することです。
後ほど設定するLinearLayoutManager
というRecyclerViewに設定するものがあるのですが、これがないと正常に動作しません。
レイアウトファイルの設定が完了したところで、次はSampleListItemAdapter
のktファイルに追記していきます。
internal class SampleListItemAdapter(private var context: Context) : RecyclerView.Adapter() { private var mSampleItems: List = listOf() fun setSampleList(sampleItems: List) { mSampleItems = sampleItems notifyDataSetChanged() } override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder { val sampleView = LayoutInflater.from(parent.context) .inflate(R.layout.list_item_sample, parent, false) return SampleListHolder(sampleView) } override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) { (holder as SampleListHolder).bind( context, mSampleItems.get(position) ) } override fun getItemCount(): Int { return mSampleItems.size } private inner class SampleListHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { private val sampleTextView: TextView init { sampleTextView = itemView.findViewById(R.id.textViewSample) } internal fun bind(context: Context, sampleText: String) { sampleTextView.text = sampleText } } }
最後にMainActivity
にAdapterの設定を行います。
LinearLayoutManagerの設定忘れにご注意ください。
class MainActivity : AppCompatActivity() { private lateinit var sampleListAdapter: SampleListItemAdapter override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) sampleListAdapter = SampleListItemAdapter(this) var list = listOf("おはようございます", "こんにちは", "こんばんは") sampleListAdapter.setSampleList(list) // 注意:このLinearLayoutManagerがないと正常に動作しません。 val linearLayoutManager = LinearLayoutManager(this) linearLayoutManager.orientation = LinearLayoutManager.VERTICAL recyclerView.layoutManager = linearLayoutManager recyclerView.adapter = sampleListAdapter } }
今回はRecyclerViewの備忘録を書きました。
毎回LinearLayoutManagerの設定を忘れてしまうので、しっかり覚えておきたいと思います。