Я пытаюсь отфильтровать мой список, который заполняется из базы данных. Вот мой код активности
listView = (ListView) findViewById(R.id.list1);
listView.setTextFilterEnabled(true);
myAdapter = new MyAdapter(SearchActivity.this, R.layout.list_items_layout);
listView.setAdapter(myAdapter);
list = new ArrayList<>();
mDBHelper = new DatabaseHelper(SearchActivity.this);
sqLiteDatabase = mDBHelper.getReadableDatabase();
cursor = mDBHelper.getAll(sqLiteDatabase);
if(cursor.moveToFirst()){
do{
String id, name, email, contact, fav, cat, audio, count;
id = cursor.getString(0);
name = cursor.getString(1);
email = cursor.getString(2);
contact = cursor.getString(3);
fav = cursor.getString(4);
cat = cursor.getString(5);
audio = cursor.getString(6);
count = cursor.getString(7);
Person person = new Person(id,name,email,contact,fav,cat, audio, count);
myAdapter.add(person);
list.add(person);
} while (cursor.moveToNext());
}
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Person person = list.get(position);
Intent intent = new Intent(SearchActivity.this, ReceiveDataActivity.class);
intent.putExtra("KEY_ID", person.getId());
intent.putExtra("NAME", person.getName());
intent.putExtra("EMAIL", person.getEmail());
intent.putExtra("CONTACT", person.getContact());
intent.putExtra("FAVORITE", person.getFav());
intent.putExtra("AUDIO", person.getAudio());
intent.putExtra("COUNT", person.getCount());
startActivity(intent);
}
});
SearchButton=(Button)findViewById(R.id.searchButton);
searchName=(EditText)findViewById(R.id.editText);
searchName.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) {
// TODO Auto-generated method stub
SearchActivity.this.myAdapter.getFilter().filter(arg0);
myAdapter.notifyDataSetChanged();
}
@Override
public void beforeTextChanged(CharSequence arg0, int arg1, int arg2,
int arg3) {
// TODO Auto-generated method stub
}
@Override
public void afterTextChanged(Editable arg0) {
// TODO Auto-generated method stub
}
});
. Представление списка основано на классе адаптера настраиваемого массива
public class MyAdapter extends ArrayAdapter {
List list = new ArrayList();
public MyAdapter(@NonNull Context context, @LayoutRes int resource) {
super(context, resource);
}
@Override
public void add(@Nullable Object object) {
super.add(object);
list.add(object);
}
@Override
public int getCount() {
return list.size();
}
@Nullable
@Override
public Object getItem(int position) {
return list.get(position);
}
@NonNull
@Override
public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {
LayoutInflater layoutInflater = (LayoutInflater) this.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = layoutInflater.inflate(R.layout.list_items_layout,null);
Typeface customFont = Typeface.createFromAsset(this.getContext().getAssets(), "faruma.ttf");
TextView _id = (TextView) convertView.findViewById(R.id.id_here);
TextView _name = (TextView) convertView.findViewById(R.id.name_here);
_name.setTypeface(customFont);
Person person = (Person) list.get(position);
_id.setText(person.getId());
_name.setText(person.getName());
return convertView;
}
Когда я набираю слово в тексте редактирования, представление списка не фильтруется.
PS: я очень плохо знаком с программированием Android (java). Возможно, я не понимаю объяснения, но я буду очень признателен за любую помощь.