سلام دوستان
من قابلیت جست جو رو ایجاد کردم ولی درست کار نمیکنه...در واقع وقتی چیزی تو ادیت تکست وارد میکنید اون آیتم هایی که باید برگردونه رو نمیکنه...
و همینطور وقتی change configuration اتفاق میوفته دیتا فیلتر شده از بین میره..
کلاس ویو مدل از ViewModel اکستند هم کرده...
تو کلاس MainActivity هم به همون صورت که اقای شاهینی گفتند instance گرفتم
به این صورت از دیتابیس query میگیرم
StudentDao.class
@Query("SELECT * FROM students WHERE firstName OR lastName LIKE '%' || :query || '%'")
LiveData<List<Student>> getStudentFiltered(String query);
StudentRepository.class
public LiveData<List<Student>> getFilteredStudents(String q){
return studentsDao.getStudentFiltered(q);
}
MainViewModel.class
public LiveData<List<Student>> getStudentsFiltered(String a){
return repository.getFilteredStudents(a);
}
MainActivity.class
EditText editText = findViewById(R.id.search_box_main);
editText.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
}
@Override
public void onTextChanged(CharSequence editable, int i, int i1, int i2) {
}
@Override
public void afterTextChanged(Editable editable) {
if (editable.length() > 0) {
viewModel.getStudentsFiltered(editable.toString()).observe(MainActivity.this, students -> {
adapterMainRecycler.replaceStudents(students);
});
} else {
adapterMainRecycler.replaceStudents(studentList);
}
}
});
مقدار studentList از اول که خواستم آیتمها رو بگیرم داخل یه متغیر ریختم و دیگه دوباره observe نکردم برای دریافت کل آیتم ها...
کلاس اداپتر هم به این صورته:
AdapterMainRecycler.class
public void replaceStudents(List<Student> students) {
this.studentList=students;
notifyDataSetChanged();
}