Ví dụ này trình bày cách đánh dấu đúng các mục đã chọn trên Android RecyclerView bằng Kotlin.
Bước 1 - Tạo một dự án mới trong Android Studio, đi tới Tệp ⇒ Dự án Mới và điền tất cả các chi tiết cần thiết để tạo một dự án mới.
Bước 2 - Thêm mã sau vào res / layout / activity_main.xml.
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="https://schemas.android.com/apk/res/android" xmlns:tools="https://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:padding="4dp" tools:context=".MainActivity"> <androidx.recyclerview.widget.RecyclerView android:id="@+id/recyclerView" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="8dp" /> </RelativeLayout>
Bước 3 - Thêm mã sau vào src / MainActivity.kt
import android.os.Bundle import androidx.appcompat.app.AppCompatActivity import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) title = "KotlinApp" val recyclerView: RecyclerView = findViewById(R.id.recyclerView) recyclerView.addItemDecoration(SimpleItemDecoration(this)) val layoutManager = LinearLayoutManager(this@MainActivity) recyclerView.layoutManager = layoutManager val posts = returnListItems() val adapter = RecyclerViewAdapter(this@MainActivity, posts) recyclerView.adapter = adapter } private fun returnListItems(): List<ItemObject>? { val items: MutableList<ItemObject> = ArrayList() items.add(ItemObject("Ballon'd'or", "2007", "Ricardo KaKa")) items.add(ItemObject("Ballon'd'or", "2008", "Cristiano Ronaldo")) items.add(ItemObject("Ballon'd'or", "2009 - 2012, 2015", "Lionel Messi")) items.add(ItemObject("Ballon'd'or", "2013, 2014, 2016, 2017", "Cristiano Ronaldo")) items.add(ItemObject("Ballon'd'or", "2018", "Luca Modric")) items.add(ItemObject("Ballon'd'or", "2019", "Lionel Messi")) return items } }
Bước 4 - Tạo các tệp lớp kotlin như được đề cập bên dưới và thêm các mã tương ứng
ItemObject.kt -
internal class ItemObject(val awardTitle: String, val awardYear: String, val player: String) { }
RecyclerViewAdapter.kt -
import android.view.LayoutInflater import android.view.ViewGroup import androidx.annotation.NonNull import androidx.recyclerview.widget.RecyclerView class RecyclerViewAdapter internal constructor( context: MainActivity, private val itemList: List<ItemObject>? ) : RecyclerView.Adapter<RecyclerViewHolders>() { @NonNull override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerViewHolders { val layoutView = LayoutInflater.from(parent.context).inflate(R.layout.list_layout, null) return RecyclerViewHolders(layoutView) } override fun onBindViewHolder(holder: RecyclerViewHolders, position: Int) { holder.awardTitle.text = "Award Title: " + itemList!![position].awardTitle holder.awardYear.text = "Award Year: " + itemList[position].awardYear holder.player.text = "Player Name: " + itemList[position].player } override fun getItemCount(): Int { return this.itemList!!.size } }
RecyclerViewHolders.kt -
import android.util.SparseBooleanArray import android.view.View import android.widget.TextView import androidx.recyclerview.widget.RecyclerView.ViewHolder class RecyclerViewHolders(itemView: View) : ViewHolder(itemView), View.OnClickListener { var awardTitle: TextView var awardYear: TextView var player: TextView private val selectedItems = SparseBooleanArray() override fun onClick(view: View) { if (selectedItems[adapterPosition, false]) { selectedItems.delete(adapterPosition) view.isSelected = false } else { selectedItems.put(adapterPosition, true) view.isSelected = true } } init { itemView.setOnClickListener(this) awardTitle = itemView.findViewById(R.id.awardTitle) awardYear = itemView.findViewById(R.id.awardYear) player = itemView.findViewById(R.id.playerName) } }
SimpleItemDecoration.kt -
import android.content.Context import android.graphics.Canvas import android.graphics.drawable.Drawable import androidx.annotation.NonNull import androidx.core.content.ContextCompat import androidx.recyclerview.widget.RecyclerView internal class SimpleItemDecoration(context: Context) : RecyclerView.ItemDecoration() { private val drawable: Drawable = ContextCompat.getDrawable(context, R.drawable.line_divider)!! override fun onDrawOver( @NonNull canvas: Canvas, parent: RecyclerView, @NonNull state: RecyclerView.State ) { val left = parent.paddingLeft val right = parent.width - parent.paddingRight val childCount = parent.childCount for (i in 0 until childCount) { val child = parent.getChildAt(i) val params = child.layoutParams as RecyclerView.LayoutParams val top = child.bottom + params.bottomMargin val bottom = top + drawable.intrinsicHeight drawable.setBounds(left, top, right, bottom) drawable.draw(canvas) } } }
Bước 5 - Tạo các tệp tài nguyên có thể vẽ được như được đề cập bên dưới và thêm các mã tương ứng
background_selecter.xml
<?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="https://schemas.android.com/apk/res/android"> <item android:drawable="@android:color/holo_green_light" android:state_pressed="false" android:state_selected="true" /> <item android:drawable="@android:color/holo_purple" android:state_selected="false" /> </selector>
line_divider.xml
<?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="https://schemas.android.com/apk/res/android" android:shape="rectangle"> <size android:width="2dp" android:height="2dp" /> <solid android:color="@color/colorPrimaryDark" /> </shape>
Bước 6 - Tạo tệp tài nguyên bố cục (list_layout.xml) và thêm mã sau
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="https://schemas.android.com/apk/res/android" android:id="@+id/container" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@drawable/background_selector" android:padding="16dp"> <TextView android:id="@+id/awardTitle" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="10dp" android:text="New Text" android:textColor="@android:color/background_dark" android:textSize="18sp" android:textStyle="bold" /> <TextView android:id="@+id/awardYear" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@+id/awardTitle" android:layout_alignStart="@+id/awardTitle" android:layout_marginTop="20dp" android:text="New Text" android:textColor="@android:color/background_dark" /> <TextView android:layout_marginBottom="10dp" android:id="@+id/playerName" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentEnd="true" android:text="New Text" android:textColor="@android:color/background_dark" /> </RelativeLayout>
Bước 7 - Thêm mã sau vào androidManifest.xmlv
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="https://schemas.android.com/apk/res/android" package="com.example.q11"> <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/AppTheme"> <activity android:name=".MainActivity"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest>
Hãy thử chạy ứng dụng của bạn. Tôi giả sử bạn đã kết nối thiết bị Di động Android thực tế với máy tính của mình. Để chạy ứng dụng từ android studio, hãy mở một trong các tệp hoạt động của dự án của bạn và nhấp vào Chạy biểu tượng từ thanh công cụ. Chọn thiết bị di động của bạn làm tùy chọn, sau đó kiểm tra thiết bị di động sẽ hiển thị màn hình mặc định của bạn