Я пытаюсь использовать функцию поиска для поиска карты, но я получаю только первый элемент в списке. Я следовал инструкциям учебника и адаптировал его к своему проекту. Я на самом деле использую библиотеку androidx. В MainActivity я создаю свой Arraylist с экземпляром из класса Model и заполняю его. В CustomFilter есть алгоритм, который фильтрует исследования. Я использовал log.d в if для отладки, и он показывает правильное исследование, которое я сделал в компиляции.
MainActivity. java
RecyclerView card;
MyAdapter myAdapter;
SharedPreferences preferences;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_pryer);
//Toast.makeText(getApplicationContext()," page prayers " ,Toast.LENGTH_SHORT).show();
card = findViewById(R.id.PrayersEvents);
preferences = this.getSharedPreferences("My_Pref", MODE_PRIVATE);
getMyList();
}
@Override
public boolean onCreateOptionsMenu(Menu menu){
MenuInflater menuInflater = getMenuInflater();
menuInflater.inflate(R.menu.menu,menu);
MenuItem item = menu.findItem(R.id.search);
SearchView searchView = (SearchView) MenuItemCompat.getActionView(item);
searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener(){
@Override
public boolean onQueryTextSubmit(String query) {
myAdapter.getFilter().filter(query);
return false;
}
@Override
public boolean onQueryTextChange(String newText) {
myAdapter.getFilter().filter(newText);
return false;
}
});
return true;
}
private void getMyList() {
ArrayList<Model> models = new ArrayList<>();
String pr_ = "Prayer : ";
String nb_ = "People : 100";
Model n = new Model();
n.setName("Mohamed");
n.setMosque("Khalil");
n.setPrayer(pr_ + " Dohr ");
n.setNbParticipants(nb_ );
n.setDescription("///////////iiiiiiiiiii///////// ");
models.add(n);
Model c = new Model();
c.setName("Sofian");
c.setMosque("Mouahidinne");
c.setPrayer(pr_ + " Dohr ");
c.setNbParticipants(nb_ );
c.setDescription("//////////////////// ");
models.add(c);
Model e = new Model();
e.setName("Ilyass");
e.setMosque("Jadid");
e.setPrayer(pr_ + " Dohr ");
e.setNbParticipants(nb_ );
e.setDescription("//////////////////// ");
models.add(e);
card.setLayoutManager(new LinearLayoutManager(this));
myAdapter = new MyAdapter(this, models);
card.setAdapter(myAdapter);
}
CustomFilter. java
public class CustomerFile extends Filter {
ArrayList<Model> filterList;
MyAdapter adapter;
public CustomerFile(ArrayList<Model> filterList, MyAdapter adapter)
{
this.filterList = filterList;
this.adapter = adapter;
}
@Override
protected FilterResults performFiltering(CharSequence constraint) {
FilterResults results = new FilterResults();
if (constraint != null && constraint.length() > 0) {
constraint = constraint.toString().toUpperCase();
ArrayList<Model> filterModels = new ArrayList<>();
for (int i = 0; i < filterList.size(); i++) {
Log.d("Files", " mosque recherchée : " +filterList.get(i).getMosque() );
if (filterList.get(i).getMosque().toUpperCase().contains(constraint))
{
// Log.d("Files", " mosque recherchée : " +filterList.get(i).getMosque() );
filterModels.add(filterList.get(i));
}
}
results.count = filterModels.size();
results.values = filterModels;
}
else {
results.count = filterList.size();
results.values = filterList;
}
return results;
}
@Override
protected void publishResults(CharSequence constraint, FilterResults results) {
adapter.models = (ArrayList<Model>) results.values;
adapter.notifyDataSetChanged();
}
}
Модель. java
public class Model {
private String name, mosque,participate,prayer,NbParticipants,description;
private Button btn;
private RelativeLayout card;
public RelativeLayout getCard() {
return card;
}
public void setCard(RelativeLayout card) {
this.card = card;
}
public Button getBtn() {
return btn;
}
public String getMosque() {
return mosque;
}
public void setMosque(String mosque) {
this.mosque = mosque;
}