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

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


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

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

เพิ่มการพึ่งพาต่อไปนี้ใน build.gradle (โมดูล:แอป)

การใช้งาน 'com.android.support:recyclerview-v7:28.0.0'implementation 'com.android.support:cardview-v7:28.0.0'implementation 'com.android.support:design:28.0.0'

ขั้นตอนที่ 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:text="ADD" android:padding="2dp" android:layout_marginBottom="4dp"/>

ขั้นตอนที่ 3 − สร้างไฟล์ทรัพยากรเลย์เอาต์ตามที่กล่าวไว้ด้านล่าง เพิ่มรหัสที่เกี่ยวข้อง -

add_contacts.xml −

  

contact_list_layout.xml −

        

ขั้นตอนที่ 4 − สร้างคลาส Java และเพิ่มรหัสต่อไปนี้ใน ContactAdapter.java

<ก่อนหน้า>นำเข้า android.app.Activity;นำเข้า android.content.Context;นำเข้า android.content.DialogInterface;นำเข้า android.text.TextUtils;นำเข้า android.view.LayoutInflater;นำเข้า android.view.View;นำเข้า android.view ViewGroup;นำเข้า android.widget.EditText;นำเข้า android.widget.Filter;นำเข้า android.widget.Filterable;นำเข้า android.widget.Toast;นำเข้า java.util.ArrayList;นำเข้า java.util.Objects;นำเข้า androidx.appcompat.app .AlertDialog นำเข้า androidx.recyclerview.widget.RecyclerView คลาส ContactAdapter ขยาย RecyclerView.Adapter ใช้ตัวกรองได้ { บริบทบริบทส่วนตัว ArrayList ส่วนตัว<รายชื่อผู้ติดต่อ> listContacts; ArrayList ส่วนตัว<รายชื่อ> mArrayList; SqliteDatabase ส่วนตัว mDatabase; ContactAdapter (บริบทบริบท ArrayList <รายชื่อผู้ติดต่อ> listContacts) { this.context =บริบท; this.listContacts =listContacts; this.mArrayList =listContacts; mDatabase =SqliteDatabase ใหม่ (บริบท); } @ แทนที่ ContactViewHolder สาธารณะ onCreateViewHolder (พาเรนต์ของ ViewGroup, int viewType) { มุมมองมุมมอง =LayoutInflater.from (parent.getContext ()).inflate (R.layout.contact_list_layout, parent, false); ส่งคืน ContactViewHolder ใหม่ (ดู); } @แทนที่โมฆะสาธารณะ onBindViewHolder (ผู้ถือ ContactViewHolder ตำแหน่ง int) { รายชื่อติดต่อสุดท้าย =listContacts.get (ตำแหน่ง); holder.tvName.setText(รายชื่อผู้ติดต่อ.getName()); holder.tvPhoneNum.setText(รายชื่อผู้ติดต่อ.getPhno()); holder.editContact.setOnClickListener (View.OnClickListener ใหม่ () { @Override public void onClick (View view) { editTaskDialog (รายชื่อติดต่อ); } }); holder.deleteContact.setOnClickListener (View.OnClickListener ใหม่ () { @แทนที่โมฆะสาธารณะ onClick (ดูมุมมอง) { mDatabase.deleteContact (contacts.getId ()); ((กิจกรรม) บริบท) เสร็จสิ้น (); context.startActivity (() (กิจกรรม) บริบท).getIntent()); } }); } @Override ตัวกรองสาธารณะ getFilter () { ส่งคืนตัวกรองใหม่ () { @Override ป้องกัน FilterResults ดำเนินการกรอง (CharSequence charSequence) { สตริง charString =charSequence.toString (); ถ้า (charString.isEmpty ()) { listContacts =mArrayList; } อื่น { ArrayList filteredList =new ArrayList<>(); for (รายชื่อผู้ติดต่อ:mArrayList) { if (contacts.getName().toLowerCase().contains(charString)) { filteredList.add(contacts); } } listContacts =filteredList; } FilterResults filterResults =ใหม่ FilterResults(); filterResults.values ​​=listContacts; ผลตอบแทนตัวกรองผลลัพธ์; } @Override ป้องกัน void publishResults (CharSequence charSequence, FilterResults filterResults) { listContacts =(ArrayList ) filterResults.values; notifyDataSetChanged(); } }; } @Override int สาธารณะ getItemCount () { ส่งคืน listContacts.size (); } โมฆะส่วนตัว editTaskDialog (รายชื่อผู้ติดต่อสุดท้าย) { LayoutInflater inflater =LayoutInflater.from (บริบท); ดู subView =inflater.inflate (R.layout.add_contacts, null); แก้ไขข้อความสุดท้าย nameField =subView.findViewById(R.id.enterName); แก้ไขข้อความสุดท้าย contactField =subView.findViewById (R.id.enterPhoneNum); ถ้า (ผู้ติดต่อ !=null) { nameField.setText(contacts.getName()); contactField.setText(String.valueOf(รายชื่อผู้ติดต่อ.getPhno())); } ตัวสร้าง AlertDialog.Builder =ใหม่ AlertDialog.Builder (บริบท); builder.setTitle("แก้ไขผู้ติดต่อ"); builder.setView (มุมมองย่อย); ตัวสร้าง. สร้าง (); builder.setPositiveButton ("แก้ไขผู้ติดต่อ" DialogInterface.OnClickListener ใหม่ () { @Override สาธารณะโมฆะ onClick (กล่องโต้ตอบ DialogInterface ซึ่ง) { ชื่อสตริงสุดท้าย =nameField.getText ().toString (); สตริงสุดท้าย ph_no =contactField.getText ().toString(); if (TextUtils.isEmpty(name)) { Toast.makeText(context, "มีบางอย่างผิดพลาด ตรวจสอบค่าที่คุณป้อน", Toast.LENGTH_LONG).show(); } else { mDatabase.updateContacts( ผู้ติดต่อใหม่ (Objects.requireNonNull(ผู้ติดต่อ).getId(), ชื่อ, ph_no)); ((กิจกรรม) บริบท).finish(); context.startActivity(((กิจกรรม) บริบท).getIntent()); } } } ); builder.setNegativeButton ("CANCEL", DialogInterface.OnClickListener ใหม่ () { @Override public void onClick (กล่องโต้ตอบ DialogInterface ซึ่ง) { Toast.makeText (บริบท "งานถูกยกเลิก", ​​Toast.LENGTH_LONG).show (); } } ); builder.show(); }}

ขั้นตอนที่ 5 − สร้างคลาส Java และเพิ่มรหัสต่อไปนี้ใน Contacts.java

ผู้ติดต่อระดับสาธารณะ { รหัส int ส่วนตัว; ชื่อสตริงส่วนตัว เบอร์โทรศัพท์สตริงส่วนตัว; ผู้ติดต่อ (ชื่อสตริง, สตริง phno) { this.name =ชื่อ; this.phoneNumber =phno; } ผู้ติดต่อ (int id, ชื่อสตริง, สตริง phno) { this.id =id; this.name =ชื่อ; this.phoneNumber =phno; } int getId() { รหัสส่งคืน; } โมฆะสาธารณะ setId (int id) { this.id =id; } สตริงสาธารณะ getName() { ชื่อกลับ; } โมฆะสาธารณะ setName (ชื่อสตริง) { this.name =ชื่อ; } สตริง getPhno () { ส่งคืน phoneNumber; } โมฆะสาธารณะ setPhno (สตริง phno) { this.phoneNumber =phno; }}

ขั้นตอนที่ 6 − สร้างคลาส Java และเพิ่มรหัสต่อไปนี้ใน ContactViewHolder.java

นำเข้า android.view.View;นำเข้า android.widget.ImageView;นำเข้า android.widget.TextView;นำเข้า androidx.recyclerview.widget.RecyclerView;คลาส ContactViewHolder ขยาย RecyclerView.ViewHolder { TextView tvName, tvPhoneNum; ImageView ลบผู้ติดต่อ; ImageView แก้ไขติดต่อ; ContactViewHolder (ดู itemView) { super (itemView); tvName =itemView.findViewById(R.id.contactName); tvPhoneNum =itemView.findViewById(R.id.phoneNum); deleteContact =itemView.findViewById(R.id.deleteContact); editContact =itemView.findViewById(R.id.editContact); }}

ขั้นตอนที่ 7 − สร้างคลาส Java และเพิ่มรหัสต่อไปนี้ใน SqliteDatabase.java

<ก่อนหน้า>นำเข้า android.content.ContentValues;นำเข้า android.content.Context;นำเข้า android.database.Cursor;นำเข้า android.database.sqlite.SQLiteDatabase;นำเข้า android.database.sqlite.SQLiteOpenHelper;นำเข้า java.util.ArrayList สาธารณะ คลาส SqliteDatabase ขยาย SQLiteOpenHelper { ส่วนตัวคงที่สุดท้าย int DATABASE_VERSION =5; สตริงสุดท้ายคงที่ส่วนตัว DATABASE_NAME ="ผู้ติดต่อ"; สตริงสุดท้ายคงที่ส่วนตัว TABLE_CONTACTS ="ผู้ติดต่อ"; สตริงสุดท้ายคงที่ส่วนตัว COLUMN_ID ="_id"; สตริงสุดท้ายคงที่ส่วนตัว COLUMN_NAME ="contactName"; สตริงสุดท้ายคงที่ส่วนตัว COLUMN_NO ="phoneNumber"; SqliteDatabase (บริบทบริบท) { super (บริบท, DATABASE_NAME, null, DATABASE_VERSION); } @แทนที่โมฆะสาธารณะ onCreate (SQLiteDatabase db) { String CREATE_CONTACTS_TABLE ="CREATE TABLE " + TABLE_CONTACTS + "(" + COLUMN_ID + " INTEGER PRIMARY KEY" + COLUMN_NAME + " TEXT" + COLUMN"_NO + ") INTE"; db.execSQL(CREATE_CONTACTS_TABLE); } @แทนที่โมฆะสาธารณะในการอัพเกรด (ฐานข้อมูล SQLiteDatabase, int oldVersion, int newVersion) { db.execSQL ("วางตารางหากมีอยู่" + TABLE_CONTACTS); onCreate(db); } ArrayList listContacts() { String sql ="select * from" + TABLE_CONTACTS; ฐานข้อมูล SQLiteDatabase =this.getReadableDatabase(); ArrayList storeContacts =ArrayList ใหม่<>(); เคอร์เซอร์เคอร์เซอร์ =db.rawQuery(sql, null); ถ้า (cursor.moveToFirst ()) { ทำ { int id =Integer.parseInt (เคอร์เซอร์.getString (0)); ชื่อสตริง =cursor.getString(1); สตริง phno =cursor.getString (2); storeContacts.add (ผู้ติดต่อใหม่ (id, ชื่อ, phno)); } ในขณะที่ (cursor.moveToNext()); } เคอร์เซอร์.close(); ส่งคืนร้านค้าผู้ติดต่อ; } เป็นโมฆะ addContacts (รายชื่อผู้ติดต่อ) { ค่า ContentValues ​​=ใหม่ ContentValues ​​(); values.put(COLUMN_NAME, contacts.getName()); values.put(COLUMN_NO, contacts.getPhno()); ฐานข้อมูล SQLiteDatabase =this.getWritableDatabase(); db.insert(TABLE_CONTACTS, null, ค่า); } เป็นโมฆะ updateContacts (รายชื่อผู้ติดต่อ) { ค่า ContentValues ​​=ใหม่ ContentValues ​​(); values.put(COLUMN_NAME, contacts.getName()); values.put(COLUMN_NO, contacts.getPhno()); ฐานข้อมูล SQLiteDatabase =this.getWritableDatabase(); db.update(TABLE_CONTACTS, ค่า, COLUMN_ID + " =?", สตริงใหม่[]{String.valueOf(contacts.getId())}); } โมฆะ deleteContact (int id) { SQLiteDatabase db =this.getWritableDatabase (); db.delete(TABLE_CONTACTS, COLUMN_ID + " =?", สตริงใหม่[]{String.valueOf(id)}); }}

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

นำเข้า androidx.appcompat.app.AlertDialog;นำเข้า androidx.appcompat.app.AppCompatActivity;นำเข้า androidx.recyclerview.widget.LinearLayoutManager;นำเข้า androidx.recyclerview.widget.RecyclerView;นำเข้า android.content.DialogInterface;นำเข้า android.os .Bundle;นำเข้า android.text.TextUtils;นำเข้า android.view.LayoutInflater;นำเข้า android.view.View;นำเข้า android.widget.Button;นำเข้า android.widget.EditText;นำเข้า android.widget.Toast;นำเข้า java.util ArrayList; MainActivity คลาสสาธารณะขยาย AppCompatActivity { mDatabase SqliteDatabase ส่วนตัว; @Override ป้องกันโมฆะ onCreate (Bundle saveInstanceState) { super.onCreate (savedInstanceState); setContentView(R.layout.activity_main); RecyclerView contactView =findViewById (R.id.myContactList); LinearLayoutManager linearLayoutManager =ใหม่ LinearLayoutManager (นี่); contactView.setLayoutManager(linearLayoutManager); contactView.setHasFixedSize(จริง); mDatabase =SqliteDatabase ใหม่ (นี้); ArrayList<ผู้ติดต่อ> allContacts =mDatabase.listContacts(); ถ้า (allContacts.size ()> 0) { contactView.setVisibility (View.VISIBLE); ContactAdapter mAdapter =ContactAdapter ใหม่ (นี่ allContacts); contactView.setAdapter(mAdapter); } อื่น ๆ { contactView.setVisibility (View.GONE); Toast.makeText(นี่คือ "ไม่มีผู้ติดต่อในฐานข้อมูล เริ่มเพิ่มเดี๋ยวนี้", Toast.LENGTH_LONG).show(); } ปุ่ม btnAdd =findViewById(R.id.btnAdd); btnAdd.setOnClickListener (View.OnClickListener ใหม่ () { @แทนที่โมฆะสาธารณะ onClick (ดูมุมมอง) { addTaskDialog (); } }); } โมฆะส่วนตัว addTaskDialog () { LayoutInflater inflater =LayoutInflater.from (นี้); ดู subView =inflater.inflate (R.layout.add_contacts, null); แก้ไขข้อความสุดท้าย nameField =subView.findViewById(R.id.enterName); แก้ไขข้อความสุดท้าย noField =subView.findViewById (R.id.enterPhoneNum); ตัวสร้าง AlertDialog.Builder =ใหม่ AlertDialog.Builder (นี้); builder.setTitle("เพิ่มผู้ติดต่อใหม่"); builder.setView (มุมมองย่อย); ตัวสร้าง. สร้าง (); builder.setPositiveButton ("ADD CONTACT", DialogInterface.OnClickListener ใหม่ () { @Override public void onClick (กล่องโต้ตอบ DialogInterface int ซึ่ง) { ชื่อสตริงสุดท้าย =nameField.getText ().toString (); สตริงสุดท้าย ph_no =noField.getText ().toString(); if (TextUtils.isEmpty(name))) { Toast.makeText(MainActivity.this, "มีบางอย่างผิดพลาด ตรวจสอบค่าที่คุณป้อน", Toast.LENGTH_LONG).show(); } อื่น { รายชื่อติดต่อใหม่ =ผู้ติดต่อใหม่ (ชื่อ ph_no); mDatabase.addContacts(newContact); เสร็จสิ้น (); startActivity(getIntent()); } } }); builder.setNegativeButton ("CANCEL", DialogInterface.OnClickListener ใหม่ () { @Override public void onClick (กล่องโต้ตอบ DialogInterface ซึ่ง) { Toast.makeText (MainActivity.this, "Task cancelled", Toast.LENGTH_LONG).show (); } }); builder.show(); } @Override ป้องกันโมฆะ onDestroy() { super.onDestroy(); ถ้า (mDatabase !=null) { mDatabase.close(); } }}

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

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

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

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

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