Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Android

จะใช้ recyclerview กับฐานข้อมูลใน Android โดยใช้ Kotlin ได้อย่างไร?


ตัวอย่างนี้สาธิตวิธีใช้ recyclerview กับฐานข้อมูลใน Android โดยใช้ Kotlin

ขั้นตอนที่ 1 − สร้างโครงการใหม่ใน Android Studio ไปที่ไฟล์ ⇒ โครงการใหม่และกรอกรายละเอียดที่จำเป็นทั้งหมดเพื่อสร้างโครงการใหม่

ขั้นตอนที่ 2 − เพิ่มรหัสต่อไปนี้ใน res/layout/activity_main.xml

  <ปุ่ม android:id="@+id/ btnAdd" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="bottom|end" android:layout_marginEnd="16dp" android:layout_marginBottom="4dp" android:padding="2dp" android:text="เพิ่ม" />

ขั้นตอนที่ 3 − เพิ่มรหัสต่อไปนี้ใน src/MainActivity.kt

<ก่อนหน้า>นำเข้า android.os.Bundleimport android.text.TextUtilsimport android.view.LayoutInflaterimport android.view.Viewimport android.widget.Buttonimport android.widget.EditTextimport android.widget.Toastimport androidx.appcompat.app.AlertDialogimpat androidx.appcom app.AppCompatActivityimport androidx.recyclerview.widget.LinearLayoutManagerimport androidx.recyclerview.widget.RecyclerViewclass MainActivity :AppCompatActivity () { lateinit ส่วนตัว var dataBase:SqliteDatabase override fun on Create (savedInstanceState:Bundle?) { super.stanceConCreatet .activity_main) title ="KotlinApp" กับ contactView:RecyclerView =findViewById(R.id.myContactList) val linearLayoutManager =LinearLayoutManager (นี้) contactView.layoutManager =linearLayoutManager contactView.setHasFixedSize(true) dataBase =Contact Sqlite>database () ถ้า (allContacts.size> 0) { contactView.visibility =V iew.VISIBLE val mAdapter =ContactAdapter (นี่ allContacts) contactView.adapter =mAdapter } อื่น { contactView.visibility =View.GONE Toast.makeText ( นี่ "ไม่มีผู้ติดต่อในฐานข้อมูล เริ่มเพิ่มเดี๋ยวนี้", Toast.LENGTH_LONG ).show() } val btnAdd:Button =findViewById(R.id.btnAdd) btnAdd.setOnClickListener { addTaskDialog() } } ความสนุกส่วนตัว addTaskDialog () { val inflater =LayoutInflater.from (นี่ ) val subView =inflater.inflate(R.layout.add_contacts, null) val nameField:EditText =subView.findViewById(R.id.enterName) val noField:EditText =subView.findViewById(R.id.enterPhoneNum) val builder =AlertDialog .Builder (นี้) builder.setTitle ("เพิ่มผู้ติดต่อใหม่") builder.setView (subView) builder.create () builder.setPositiveButton ("เพิ่มผู้ติดต่อ") { _, _ -> val name =nameField.text.toString ( ) val phoneNum =noField.text.toString() if (TextUtils.isEmpty(name)) { Toast.makeText( this@MainActivity, "มีบางอย่างผิดพลาด ตรวจสอบค่าที่คุณป้อน", Toast.LENGTH_LONG ).show() } else { val newContact =ผู้ติดต่อ (ชื่อ, โทรศัพท์ Num) dataBase.addContacts(newContact) finish() startActivity(intent) } } builder.setNegativeButton("CANCEL") { _, _ -> Toast.makeText(this@MainActivity, "Task cancelled",Toast.LENGTH_LONG).show ()} builder.show() } แทนที่ความสนุก onDestroy() { super.onDestroy() dataBase.close() }}

ขั้นตอนที่ 4 − สร้างไฟล์คลาส kotlin ตามที่ระบุด้านล่างและเพิ่มรหัสที่เกี่ยวข้อง

Contacts.kt

คลาสผู้ติดต่อ { var id =0 ชื่อ var:สตริง var phno:ตัวสร้างสตริงภายใน (ชื่อ:สตริง phno:สตริง) { this.name =ชื่อ this.phno =phno } คอนสตรัคเตอร์ภายใน (id:Int ชื่อ:สตริง phno:สตริง) { this.id =id this.name =ชื่อ this.phno =phno }}

ContactViewHolder.kt

นำเข้า android.view.Viewimport android.widget.ImageViewimport android.widget.TextViewimport androidx.recyclerview.widget.RecyclerViewclass ContactViewHolder (itemView:View) :RecyclerView.ViewHolder (itemView) { var tvName:TextView =itemView.findViewById (R .id.contactName) var tvPhoneNum:TextView =itemView.findViewById(R.id.phoneNum) var deleteContact:ImageView =itemView.findViewById(R.id.deleteContact) var editContact:ImageView =itemView.findViewById(R.id.editContact) }

ContactAdapter.kt

<ก่อนหน้า>นำเข้า android.app.Activityimport android.content.Contextimport android.text.TextUtilsimport android.view.LayoutInflaterimport android.view.ViewGroupimport android.widget.EditTextimport android.widget.Filterimport android.widget.Filterableimport android.widget.Toastimport android .appcompat.app.AlertDialogimport androidx.recyclerview.widget.RecyclerViewimport java.util. * ContactAdapter คลาสภายใน (บริบท val ส่วนตัว:บริบท, listContacts:ArrayList <รายชื่อติดต่อ>) :RecyclerView.Adapter () ที่ติดต่อได้ { รายการ var ส่วนตัวที่ติดต่อได้ :ArrayList val ส่วนตัว mArrayList:ArrayList val ส่วนตัว mDatabase:SqliteDatabase init { this.listContacts =listContacts this.mArrayList =listContacts mDatabase =SqliteDatabase(context) } แทนที่ fun onCreateViewHolder (พาเรนต์:ViewGroup, viewType:Int):ContactViewHolder { มุมมอง val =LayoutInflater.from (parent.context).inflate (R.layout.contact_list_layout, parent, false) retu rn ContactViewHolder (ดู) } แทนที่ความสนุกบนBindViewHolder (ผู้ถือ:ContactViewHolder ตำแหน่ง:Int) { รายชื่อผู้ติดต่อ =listContacts [ตำแหน่ง] holder.tvName.text =contacts.name holder.tvPhoneNum.text =contacts.phno holder.editContact.setOnClickListener { editTaskDialog (ผู้ติดต่อ) } holder.deleteContact.setOnClickListener { mDatabase.deleteContact (contacts.id) (บริบทเป็นกิจกรรม) เสร็จสิ้น () context.startActivity (context.intent) } } แทนที่ fun getFilter ():ตัวกรอง { ส่งคืนวัตถุ:ตัวกรอง () { แทนที่ fun performFiltering (charSequence:CharSequence):FilterResults { val charString =charSequence.toString() listContacts =if (charString.isEmpty()) { mArrayList } else { val filteredList =ArrayList() สำหรับ (ผู้ติดต่อใน mArrayList) { if (contacts.name.toLowerCase().contains(charString)) { filteredList.add (ผู้ติดต่อ) } } filteredList } val filterResults =FilterResults () filterResults.values ​​=listContacts ส่งคืน filterResults } แทนที่ fun publishResults ( charSequence:CharSequence, filterResults:FilterResults ) {Contact list.ContactSvalue =filterResults> } } } แทนที่ความสนุก getItemCount ():Int { return listContacts.size } ความสนุกส่วนตัว editTaskDialog (ผู้ติดต่อ:ผู้ติดต่อ) { val inflater =LayoutInflater.from (บริบท) val subView =inflater.inflate (R.layout.add_contacts, null) val nameField:EditText =subView.findViewById(R.id.enterName) val contactField:EditText =subView.findViewById(R.id.enterPhoneNum) nameField.setText(contacts.name) contactField.setText(contacts.phno) val builder =AlertDialog ตัวสร้าง (บริบท) builder.setTitle ("แก้ไขผู้ติดต่อ") builder.setView (subView) builder.create () builder.setPositiveButton ( "แก้ไขผู้ติดต่อ" ) { _, _ -> val name =nameField.text.toString () val phNo =contactField.text.toString () ถ้า (TextUtils.isEmpty (ชื่อ)) { Toast.makeText (บริบท "มีบางอย่างผิดพลาด ตรวจสอบค่าที่คุณป้อน", Toast.LENGTH_LONG ).show() } else { mDatabase.updateContacts( Contacts( Objects.requireNonNull(contacts.id) เป็น Int, name, phNo ) ) (context as Activity).finish( ) context.startActivity(context.intent) } } builder.setNegativeButton ( "ยกเลิก" ) { _, _ -> Toast.makeText (บริบท "งานถูกยกเลิก", ​​Toast.LENGTH_LONG).show() } builder.show() }}

SqliteDatabase.kt

นำเข้า android.content.ContentValuesimport android.content.Contextimport android.database.sqlite.SQLiteDatabaseimport android.database.sqlite.SQLiteOpenHelperimport java.util.*class SqliteDatabase คอนสตรัคเตอร์ภายใน (บริบท:Context_) :SQLiteOpenHelper บริบท (บริบท) null, DATABASE_VERSION) { แทนที่ความสนุกบนสร้าง (db:SQLiteDatabase) { val createContactTable =("สร้างตาราง" + TABLE_CONTACTS + "(" + COLUMN_ID + " คีย์หลัก INTEGER" + COLUMN_NAME + " TEXT," + COLUMN"_NO + " INTEGER + ")") db.execSQL(createContactTable) } แทนที่ fun onUpgrade ( db:SQLiteDatabase, oldVersion:Int, newVersion:Int ) { db.execSQL("DROP TABLE IF EXISTS $TABLE_CONTACTS") on Create(db) } fun listContacts ( ):ArrayList { val sql ="select * from $TABLE_CONTACTS" val db =this.readableDatabase val storeContacts =ArrayList() val cursor =db.rawQuery(sql, null) if (cur) sor.moveToFirst()) { do { val id =cursor.getString(0).toInt() val name =cursor.getString(1) val phno =cursor.getString(2) storeContacts.add (ผู้ติดต่อ (id, ชื่อ, phno)) } while (cursor.moveToNext()) } cursor.close() return storeContacts } fun addContacts (ผู้ติดต่อ:Contacts) { ค่า val =ContentValues ​​() values.put (COLUMN_NAME, contacts.name) values.put (COLUMN_NO) , contacts.phno) val db =this.writableDatabase db.insert (TABLE_CONTACTS, null, ค่า) } อัปเดตผู้ติดต่อสนุก (ผู้ติดต่อ:ผู้ติดต่อ) { ค่า val =ContentValues ​​() values.put (COLUMN_NAME, contacts.name) values.put ( COLUMN_NO, contacts.phno) val db =this.writableDatabase db.update ( TABLE_CONTACTS, ค่า, "$COLUMN_ID =?", arrayOf(contacts.id.toString()) ) } fun deleteContact (id:Int) { val db =this.writableDatabase db.delete (TABLE_CO .) NTACTS, "$COLUMN_ID =?", arrayOf(id.toString()) ) } วัตถุที่แสดงร่วม { const ส่วนตัว val DATABASE_VERSION =5 ส่วนตัว const val DATABASE_NAME ="Contacts" ส่วนตัว const val TABLE_CONTACTS ="Contacts" ส่วนตัว const val COLUMN_ID =" _id" ค่า const ส่วนตัว COLUMN_NAME ="contactName" ค่า const ส่วนตัว COLUMN_NO ="phoneNumber" }}

ขั้นตอนที่ 5 − สร้างไฟล์ทรัพยากรเลย์เอาต์ (add_contacts.xml &contact_list_layout.xml) และเพิ่มรหัสต่อไปนี้

add_contacts.xml

  

contact_list_layout.xml

        

ขั้นตอนที่ 6 − เพิ่มรหัสต่อไปนี้ใน androidManifest.xml

     <หมวดหมู่ android:name=" android.intent.category.LAUNCHER" />   

มาลองเรียกใช้แอปพลิเคชันของคุณกัน ฉันคิดว่าคุณได้เชื่อมต่ออุปกรณ์มือถือ Android จริงกับคอมพิวเตอร์ของคุณ ในการรันแอพจาก android studio ให้เปิดไฟล์กิจกรรมของโปรเจ็กต์ของคุณแล้วคลิก Run จะใช้ recyclerview กับฐานข้อมูลใน Android โดยใช้ Kotlin ได้อย่างไร? ไอคอนจากแถบเครื่องมือ เลือกอุปกรณ์มือถือของคุณเป็นตัวเลือก จากนั้นตรวจสอบอุปกรณ์มือถือของคุณซึ่งจะแสดงหน้าจอเริ่มต้นของคุณ

จะใช้ recyclerview กับฐานข้อมูลใน Android โดยใช้ Kotlin ได้อย่างไร?

จะใช้ recyclerview กับฐานข้อมูลใน Android โดยใช้ Kotlin ได้อย่างไร?

จะใช้ recyclerview กับฐานข้อมูลใน Android โดยใช้ Kotlin ได้อย่างไร?