Android Kotlin

เขียนแอพฯ Android ด้วย Kotlin การทำ itemClickListener บน RecyclerView

บทเรียนต่อยอด RecyclerView บน Android ด้วย Kotlin กับการทำ itemClickListener บน Viewholder ให้เปลี่ยนหน้า Intent และส่งค่า

จากบทเรียนเดิม เขียนแอพฯ Android ด้วย Kotlin การใช้ RecyclerView และ Array

เราจะมาทำให้แอพพลิเคชันก่อนหน้าของเราที่เป็นเมนูอาหารนั้น แตะรายการแล้วเปลี่ยนหน้าได้:

สร้างหน้า Empty Activity ใหม่ขึ้นมาโดยคลิกขวาที่ apps->New->Activity->Empty Activity แล้วตั้งชื่อว่า InformationActivity

แก้ไข Layout ส่วนของ XML ไฟล์ activity_information.xml ดังนี้:

<?xml version="1.0" encoding="utf-8"?>  
 <android.support.constraint.ConstraintLayout  
     xmlns:android="http://schemas.android.com/apk/res/android"  
     xmlns:tools="http://schemas.android.com/tools"  
     xmlns:app="http://schemas.android.com/apk/res-auto"  
     android:layout_width="match_parent"  
     android:layout_height="match_parent"  
     tools:context=".InformationActivity">  
   <ImageView  
       android:layout_width="400dp"  
       android:layout_height="180dp"  
       android:id="@+id/imageView" app:layout_constraintEnd_toEndOf="parent"  
       android:layout_marginEnd="8dp" app:layout_constraintStart_toStartOf="parent"  
       android:layout_marginStart="8dp" android:layout_marginTop="36dp" app:layout_constraintTop_toTopOf="parent"  
       app:layout_constraintHorizontal_bias="0.498" android:scaleType="centerCrop"  
       app:srcCompat="@drawable/image1"/>  
   <TextView  
       android:text="TextView"  
       android:layout_width="0dp"  
       android:layout_height="wrap_content"  
       android:id="@+id/textView" android:layout_marginTop="28dp"  
       app:layout_constraintTop_toBottomOf="@+id/imageView" app:layout_constraintStart_toStartOf="parent"  
       android:layout_marginStart="8dp" app:layout_constraintEnd_toEndOf="parent" android:layout_marginEnd="8dp"  
       android:textAlignment="center" android:textSize="20dp"/>  
 </android.support.constraint.ConstraintLayout>

ซึ่ง Layout นี้จะมี TextView กับ ID ชื่อ textview และ ImageView ที่มี ID ชื่อ imageView

กลับไปที่ไฟล์ MyAdapter.kt กลับไปแก้ไขฟังก์ชัน onBindViewHolder() เราจะแทรกคำสั่ง setOnClicklistener() เข้าไปและเรียกใช้ Intent โดยอ้าง Context หน้านั้นๆ ได้โดยตรงพร้อมระบุ array position ไปยังหน้าปลายทางได้

override fun onBindViewHolder(p0: ViewHolder, p1: Int) {  
   p0?.getNameTxt?.text = items.get(p1)  
   p0?.getThumbnail?.setImageResource(imageId.get(p1))  
   p0?.itemView.setOnClickListener {  
     Toast.makeText(context, "Click: "+items.get(p1), Toast.LENGTH_LONG).show()  
     var intent = Intent(context, InformationActivity::class.java)  
     intent.putExtra("TITLE",""+ items.get(p1))  
     intent.putExtra("IMAGE",imageId.get(p1))  
     context.startActivity(intent)  
   }  
 }

สังเกตจะเห็นว่า IMAGE เป็น parameter ที่ส่งค่า Int ไม่ใช้ String

กลับไปที่หน้า InformationActivity.kt แก้ไข Class ของมันให้เป็นแบบนี้:

package com.daydev.iapplication  
 import android.content.Intent  
 import android.content.Intent.getIntent  
 import android.support.v7.app.AppCompatActivity  
 import android.os.Bundle  
 import android.widget.ImageView  
 import android.widget.TextView  
 class InformationActivity : AppCompatActivity() {  
   var textView: TextView? = null  
   var imageView: ImageView? = null  
   override fun onCreate(savedInstanceState: Bundle?) {  
     super.onCreate(savedInstanceState)  
     setContentView(R.layout.activity_information)  
     textView = findViewById(R.id.textView) as TextView  
     imageView = findViewById(R.id.imageView) as ImageView  
     var intent = getIntent()  
     textView!!.setText(""+intent.getStringExtra("TITLE"))  
     imageView!!.setImageResource(intent.getIntExtra("IMAGE",0))  
   }  
 }

ทดสอบแตะที่รายการอาหารดู เพื่อสังเกตข้อมูลการเปลี่ยนหน้า:

Asst. Prof. Banyapon Poolsawas

อาจารย์ประจำสาขาวิชาการออกแบบเชิงโต้ตอบ และการพัฒนาเกม วิทยาลัยครีเอทีฟดีไซน์ & เอ็นเตอร์เทนเมนต์เทคโนโลยี มหาวิทยาลัยธุรกิจบัณฑิตย์ ผู้ก่อตั้ง บริษัท Daydev Co., Ltd, (เดย์เดฟ จำกัด)

Related Articles

Back to top button

Adblock Detected

เราตรวจพบว่าคุณใช้ Adblock บนบราวเซอร์ของคุณ,กรุณาปิดระบบ Adblock ก่อนเข้าอ่าน Content ของเรานะครับ, ถือว่าช่วยเหลือกัน