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

จะกรอง RecyclerView ด้วย SearchView บน Android ได้อย่างไร


ตัวอย่างนี้สาธิตวิธีการกรอง RecyclerView ด้วย SearchView บน Android

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

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

  

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

แพ็คเกจ com.app.sample;นำเข้า android.os.Bundle;นำเข้า android.view.Menu;นำเข้า android.view.MenuInflater;นำเข้า android.view.MenuItem;นำเข้า android.view.inputmethod.EditorInfo;นำเข้า android widget.SearchView;นำเข้า androidx.appcompat.app.AppCompatActivity นำเข้า androidx.recyclerview.widget.LinearLayoutManager นำเข้า androidx.recyclerview.widget.RecyclerView นำเข้า java.util.ArrayList นำเข้า java.util.Activity คลาสสาธารณะ MainActivity ขยาย AppCompat { อะแด็ปเตอร์ ExampleAdapter ส่วนตัว; รายการส่วนตัว  exampleList; @Override ป้องกันโมฆะ onCreate (Bundle saveInstanceState) { super.onCreate (savedInstanceState); setContentView(R.layout.activity_main); fillExampleList(); setUpRecyclerView(); } โมฆะส่วนตัว fillExampleList() { exampleList =new ArrayList<>(); exampleList.add(ตัวอย่างใหม่(R.drawable.ic_android, "หนึ่ง", "สิบ")); exampleList.add(ใหม่ ExampleItem(R.drawable.ic_audio, "สอง", "สิบเอ็ด")); exampleList.add(ตัวอย่างใหม่(R.drawable.ic_sun, "สาม", "สิบสอง")); exampleList.add(ตัวอย่างใหม่(R.drawable.ic_android, "สี่", "สิบสาม")); exampleList.add(ตัวอย่างใหม่(R.drawable.ic_audio, "ห้า", "สิบสี่")); exampleList.add(ตัวอย่างใหม่(R.drawable.ic_sun, "Six", "Fifteen")); exampleList.add(ตัวอย่างใหม่(R.drawable.ic_android, "Seven", "Sixteen")); exampleList.add(ตัวอย่างใหม่(R.drawable.ic_audio, "Eight", "Seventeen")); exampleList.add (ตัวอย่างใหม่ (R.drawable.ic_sun, "Nine", "Eighteen")); } โมฆะส่วนตัว setUpRecyclerView () { RecyclerView recyclerView =findViewById (R.id.recycler_view); recyclerView.setHasFixedSize (จริง); RecyclerView.LayoutManager layoutManager =ใหม่ LinearLayoutManager (นี่); อะแดปเตอร์ =ใหม่ ExampleAdapter (exampleList); recyclerView.setLayoutManager (layoutManager); recyclerView.setAdapter (อะแดปเตอร์); } @แทนที่บูลีนสาธารณะ onCreateOptionsMenu (เมนูเมนู) { MenuInflater inflater =getMenuInflater (); inflater.inflate(R.menu.example_menu เมนู); MenuItem searchItem =menu.findItem(R.id.action_search); เมนูรายการ SearchView searchView =(SearchView) searchItem.getActionView (); ค้นหา searchView.setImeOptions (EditorInfo.IME_ACTION_DONE); searchView.setOnQueryTextListener (SearchView.OnQueryTextListener ใหม่ () { @แทนที่บูลีนสาธารณะ onQueryTextSubmit (ข้อความค้นหาสตริง) { return false; } @Override บูลีนสาธารณะ onQueryTextChange (String newText) { adapter.getFilter (). ตัวกรอง (ข้อความใหม่); คืนค่าเท็จ; } }); คืนค่าจริง; }}

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

แพ็คเกจ com.app.sample; ExampleItem คลาสสาธารณะ ExampleItem { int imageResource ส่วนตัว; ข้อความสตริงส่วนตัว1; ข้อความสตริงส่วนตัว2; ExampleItem สาธารณะ (int imageResource, String text1, String text2) { this.imageResource =imageResource; this.text1 =ข้อความ 1; this.text2 =text2; } สาธารณะ int getImageResource () { ส่งคืน imageResource; } สตริงสาธารณะ getText1 () { ส่งคืน text1; } สตริงสาธารณะ getText2 () { ส่งคืน text2; }}

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

แพ็คเกจ com.app.sample;นำเข้า android.view.LayoutInflater;นำเข้า android.view.View;นำเข้า android.view.ViewGroup;นำเข้า android.widget.Filter;นำเข้า android.widget.Filterable;นำเข้า android.widget ImageView;นำเข้า android.widget.TextView;นำเข้า androidx.annotation.NonNull;นำเข้า androidx.recyclerview.widget.RecyclerView;นำเข้า java.util.ArrayList;นำเข้า java.util.List;คลาสสาธารณะ ExampleAdapter expandsRecyclerView.AdapterExampleAdapter. ใช้ตัวกรองได้ { รายการส่วนตัว  exampleList; รายการส่วนตัว  exampleListFull; คลาส ExampleViewHolder ขยาย RecyclerView.ViewHolder { ImageView imageView; TextView textView1; TextView textView2; ExampleViewHolder (ดู itemView) { super (itemView); imageView =itemView.findViewById(R.id.image_view); textView1 =itemView.findViewById(R.id.text_view1); textView2 =itemView.findViewById(R.id.text_view2); } } ExampleAdapter (รายการ  exampleList) { this.exampleList =exampleList; exampleListFull =ใหม่ ArrayList<>(exampleList); } @NonNull @Override สาธารณะ ExampleViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { View v =LayoutInflater.from (parent.getContext ()).inflate (R.layout.example_item, parent, false); ส่งคืน ExampleViewHolder ใหม่ (v); } @แทนที่โมฆะสาธารณะ onBindViewHolder(@NonNull ผู้ถือ ExampleViewHolder ตำแหน่ง int) { ExampleItem currentItem =exampleList.get (ตำแหน่ง); holder.imageView.setImageResource(currentItem.getImageResource()); เจ้าของ เจ้าของข้อความView1.setText(currentItem.getText1()); เจ้าของข้อความView2.setText(currentItem.getText2()); } @Override int สาธารณะ getItemCount () { return exampleList.size (); } @Override ตัวกรองสาธารณะ getFilter () { return exampleFilter; } ตัวกรองส่วนตัว exampleFilter =ตัวกรองใหม่ () { @Override ที่ได้รับการป้องกัน FilterResults performFiltering (ข้อจำกัด CharSequence) { รายการ  filteredList =ใหม่ ArrayList <> (); ถ้า (ข้อจำกัด ==null || ข้อ จำกัด ความยาว () ==0) { filteredList.addAll (exampleListFull); } อื่น { String filterPattern =constraint.toString().toLowerCase().trim(); สำหรับ (รายการตัวอย่าง:exampleListFull) { if (item.getText2().toLowerCase().contains(filterPattern)) { filteredList.add(item); } } } ผลลัพธ์ของ FilterResults =ใหม่ FilterResults(); results.values ​​=กรองรายการ; ส่งคืนผลลัพธ์; } @Override ป้องกัน void publishResults (ข้อจำกัด CharSequence, ผลลัพธ์ FilterResults) { exampleList.clear (); exampleList.addAll((รายการ) results.values); notifyDataSetChanged(); } };}

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

     

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

 

ขั้นตอนที่ 8 − เพิ่มรหัสต่อไปนี้ใน Manifest/AndroidManifest.xml

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

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

จะกรอง RecyclerView ด้วย SearchView บน Android ได้อย่างไร