Computer >> 컴퓨터 >  >> 프로그램 작성 >> Android

Android에서 SearchView로 RecyclerView를 필터링하는 방법은 무엇입니까?

<시간/>

이 예는 Android에서 SearchView로 RecyclerView를 필터링하는 방법을 보여줍니다.

1단계 − Android Studio에서 새 프로젝트를 생성하고 파일 ⇒ 새 프로젝트로 이동하여 필요한 모든 세부 정보를 입력하여 새 프로젝트를 생성합니다.

2단계 − res/layout/activity_main.xml에 다음 코드를 추가합니다.

  

3단계 − src/MainActivity.java

에 다음 코드 추가
패키지 com.app.sample;import android.os.Bundle;import android.view.Menu;import android.view.MenuInflater;import android.view.MenuItem;import android.view.inputmethod.EditorInfo;import android. widget.SearchView;가져오기 androidx.appcompat.app.AppCompatActivity;가져오기 androidx.recyclerview.widget.LinearLayoutManager;가져오기 androidx.recyclerview.widget.RecyclerView;가져오기 java.util.ArrayList;가져오기 java.util.List;공개 클래스 MainActivity가 AppCompatActivity를 확장합니다 { 개인 ExampleAdapter 어댑터; 개인 목록 exampleList; @Override protected void onCreate(Bundle storedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); 채우기 예 목록(); setUpRecyclerView(); } 개인 무효 fillExampleList() { exampleList =새로운 ArrayList<>(); exampleList.add(new ExampleItem(R.drawable.ic_android, "하나", "10")); exampleList.add(new ExampleItem(R.drawable.ic_audio, "Two", "Eleven")); exampleList.add(new ExampleItem(R.drawable.ic_sun, "3", "12")); exampleList.add(new ExampleItem(R.drawable.ic_android, "4", "13")); exampleList.add(new ExampleItem(R.drawable.ic_audio, "5", "14")); exampleList.add(new ExampleItem(R.drawable.ic_sun, "6", "15")); exampleList.add(new ExampleItem(R.drawable.ic_android, "세븐", "식스틴")); exampleList.add(new ExampleItem(R.drawable.ic_audio, "에잇", "세븐틴")); exampleList.add(new ExampleItem(R.drawable.ic_sun, "Nine", "Eighteen")); } 개인 무효 setUpRecyclerView() { RecyclerView 재활용 보기 =findViewById(R.id.recycler_view); 재활용 보기.setHasFixedSize(true); RecyclerView.LayoutManager layoutManager =new LinearLayoutManager(this); 어댑터 =새로운 ExampleAdapter(exampleList); 재활용 보기.setLayoutManager(레이아웃 관리자); 재활용 보기.setAdapter(어댑터); } @Override public 부울 onCreateOptionsMenu(메뉴 메뉴) { MenuInflater 팽창기 =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(new SearchView.OnQueryTextListener() { @Override public boolean onQueryTextSubmit(String query) { return false; } @Override public boolean onQueryTextChange(String newText) { adapter.getFilter().filter(newText), return false; } }); true를 반환합니다. }}

4단계 − src/ExampleItem.java

에 다음 코드 추가
패키지 com.app.sample;public class ExampleItem { private int imageResource; 개인 문자열 text1; 개인 문자열 text2; public ExampleItem(int imageResource, 문자열 text1, 문자열 text2) { this.imageResource =imageResource; this.text1 =텍스트1; this.text2 =텍스트2; } 공개 int getImageResource() { 반환 imageResource; } 공개 문자열 getText1() { 반환 텍스트1; } 공개 문자열 getText2() { 반환 텍스트2; }}

5단계 − src/ExampleAdapter.java

에 다음 코드 추가
패키지 com.app.sample;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.Filter;import android.widget.Filterable;import android.widget. ImageView;import android.widget.TextView;import androidx.annotation.NonNull;import androidx.recyclerview.widget.RecyclerView;import java.util.ArrayList;import java.util.List;public class ExampleAdapter extendsRecyclerView.Adapter exampleList; 개인 목록 exampleListFull; 클래스 ExampleViewHolder는 RecyclerView.ViewHolder를 확장합니다. { ImageView imageView; 텍스트뷰 텍스트뷰1; 텍스트뷰 텍스트뷰2; ExampleViewHolder(항목 보기 보기) { 슈퍼(항목 보기); 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 public ExampleViewHolder onCreateViewHolder(@NonNull ViewGroup 부모, int viewType) { 보기 v =LayoutInflater.from(parent.getContext()).inflate(R.layout.example_item, 부모, false); 새로운 ExampleViewHolder(v)를 반환합니다. } @Override public void onBindViewHolder(@NonNull ExampleViewHolder 홀더, int 위치) { ExampleItem currentItem =exampleList.get(position); holder.imageView.setImageResource(currentItem.getImageResource()); holder.textView1.setText(currentItem.getText1()); holder.textView2.setText(currentItem.getText2()); } @Override public int getItemCount() { return exampleList.size(); } @Override public Filter getFilter() { return exampleFilter; } private Filter exampleFilter =new Filter() { @Override protected FilterResults performFiltering(CharSequence 제약) { ListfilteredList =new ArrayList<>(); if (제약 조건 ==null || 제약.길이() ==0) {filteredList.addAll(exampleListFull); } else { 문자열 filterPattern =constraint.toString().toLowerCase().trim(); for (ExampleItem item :exampleListFull) { if (item.getText2().toLowerCase().contains(filterPattern)) {filteredList.add(item); } } } FilterResults 결과 =new FilterResults(); 결과.값 =필터링된 목록; 반환 결과; } @Override protected void publishResults(CharSequence 제약 조건, FilterResults 결과) { exampleList.clear(); exampleList.addAll((목록) 결과.값); 알림데이터세트변경(); } };}

6단계 − res/layout/example_item.xml에 다음 코드 추가

     

7단계 − res/menu/example_menu.xml에 다음 코드 추가

 

8단계 − Manifest/AndroidManifest.xml에 다음 코드 추가

     <카테고리 android:name=" android.intent.category.LAUNCHER" />  

응용 프로그램을 실행해 보겠습니다. 실제 Android 모바일 장치를 컴퓨터에 연결했다고 가정합니다. Android 스튜디오에서 앱을 실행하려면 프로젝트의 활동 파일 중 하나를 열고 도구 모음에서 실행 아이콘을 클릭합니다. 모바일 장치를 옵션으로 선택한 다음 기본 화면을 표시할 모바일 장치를 확인하십시오 -

Android에서 SearchView로 RecyclerView를 필터링하는 방법은 무엇입니까?