RecyclerView
RecyclerView is Customizable, Flexible List like view. Different from ListView.
Preparation
build.gradle
implementation 'androidx.recyclerview:recyclerview:1.1.0-beta04'
Add recyclerview support library
Coding Flow
- Prepare row (item) layout
- Prepare Activity layout
- Prepare data class
- Prepare Adapter
- Add adapter to Activity
Flow is same as ListView
recyclerview_row.xml
This is one item layout
<?xml version="1.0" encoding="utf-8"?> <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="wrap_content" xmlns:app="http://schemas.android.com/apk/res-auto"> <ImageView android:id="@+id/mainicon" android:layout_width="60dp" android:layout_height="60dp" android:layout_marginStart="16dp" android:layout_marginTop="16dp" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" android:src="@drawable/nogizaka" android:scaleType="fitCenter"/> <TextView android:id="@+id/mainname" android:layout_width="wrap_content" android:layout_height="0dp" android:layout_marginStart="8dp" app:layout_constraintStart_toEndOf="@id/mainicon" app:layout_constraintTop_toTopOf="@id/mainicon" /> <TextView android:id="@+id/maindate" android:layout_width="wrap_content" android:layout_height="0dp" android:layout_marginStart="8dp" android:layout_marginTop="3dp" android:textSize="12sp" app:layout_constraintStart_toEndOf="@id/mainname" app:layout_constraintTop_toTopOf="@id/mainname" /> <TextView android:id="@+id/content" android:layout_width="300dp" android:layout_height="0dp" android:layout_below="@+id/mainname" android:layout_marginStart="8dp" android:layout_marginTop="4dp" android:textStyle="bold" app:layout_constraintStart_toEndOf="@id/mainicon" app:layout_constraintTop_toBottomOf="@id/mainname" /> </androidx.constraintlayout.widget.ConstraintLayout>
activity_recyclerview.xml
This is main Activity Layout
<?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:layout_width="match_parent" android:layout_height="match_parent" tools:context=".activity.RecyclerViewActivity"> <androidx.recyclerview.widget.RecyclerView android:id="@+id/nogiRecyclerView" android:layout_width="0dp" android:layout_height="0dp" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent"> </androidx.recyclerview.widget.RecyclerView> </androidx.constraintlayout.widget.ConstraintLayout>
This is very simple, only RecyclerView is in
RecyclerData.kt
This is data class used by RecyclerView
data class RecyclerData(val content: String, val date: String, val name: String)
RecyclerDataAdapter.kt
Adapter class
class RecyclerDataAdapter(private val context: Context, private val list: List<RecyclerData>): RecyclerView.Adapter<RecyclerDataAdapter.RecyclerDataHolder>() { class RecyclerDataHolder(view: View) : RecyclerView.ViewHolder(view) { // View? val iconView : ImageView = view.findViewById(R.id.mainicon) val nameTextView : TextView = view.findViewById(R.id.mainname) val dateTextView : TextView = view.findViewById(R.id.maindate) val contentTextView : TextView = view.findViewById(R.id.content) } override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerDataHolder { return RecyclerDataHolder(LayoutInflater.from(context).inflate(R.layout.recyclerview_row, parent, false)) } override fun getItemCount(): Int = list.size override fun onBindViewHolder(holder: RecyclerDataHolder, position: Int) { // Bind holder.iconView.setImageResource(R.drawable.nogizaka) holder.nameTextView.text = list[position].name holder.dateTextView.text = list[position].date holder.contentTextView.text = list[position].content } }
RecyclerViewActivity.kt
Main Activity class. Prepare data and adapter. Set adapter to RecyclerView
class RecyclerViewActivity : Activity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_recyclerview) // Create sample test data val list = mutableListOf<RecyclerData>() list.add(RecyclerData("Tsundere", "2019/12/25", "Saito, Asuka")) list.add(RecyclerData("Cute", "2019/12/28", "Hori, Miona")) list.add(RecyclerData("Yancha", "2019/12/30", "Kosaka, Nao")) findViewById<RecyclerView>(R.id.nogiRecyclerView).also { it.adapter = RecyclerDataAdapter(this, list) it.layoutManager = LinearLayoutManager(this) } } }
Result

コメント