У меня есть edittext и listview в моем приложении, список контактов списка просмотров. Я хочу фильтр списка с edittext. Я искал много на Google и нашел несколько examles, но никто не работал для меня, вот моего кодапараметр поиска в пользовательском listview
my custom adapter:
public class CustomAdapter extends BaseAdapter
{
Fragment frgmnt;
ArrayList<HashMap<String, ArrayList>> contactarr;
LayoutInflater inflater;
public CustomAdapter(Fragment1 frgmnt, ArrayList<HashMap<String, ArrayList>> contactarr)
{
//
originalData=contactarr;
filteredData=contactarr;
this.frgmnt=frgmnt;
this.contactarr=contactarr;
inflater= (LayoutInflater)getActivity().getSystemServic(Context.LAYOUT_INFLATER_SERVICE);
this.contactarrsrch=new ArrayList<HashMap<String, ArrayList>>();
this.contactarrsrch.addAll(contactarr);
}
@Override
public int getCount()
{
return filteredData.size();
}
@Override
public Object getItem(int position)
{
return filteredData.get(position);
//return null;
}
@Override
public long getItemId(int position)
{
// TODO Auto-generated method stub
return position;
}
@Override
public View getView(int position, View view, ViewGroup parent)
{
if(view==null)
{
view=inflater.inflate(R.layout.list_data,null);
}
LinearLayout ll_row =(LinearLayout) view.findViewById(R.id.ll_row);
TextView txtContact = (TextView) view.findViewById(R.id.contact_name);
HashMap<String, ArrayList> map=contactarr.get(position);
ArrayList name =map.get("Name_");
txtContact.setText(name.get(0).toString());
return view;
}
}
this is in onCrate():
InputSearch.addTextChangedListener(new TextWatcher()
{
final ArrayList<HashMap<String,ArrayList>> tempArrayList =new ArrayList<HashMap<String,ArrayList>>(contactarr1);
@Override
public void onTextChanged(CharSequence s, int start, int before, int count)
{
String text = InputSearch.getText().toString().toLowerCase(Locale.getDefault());
//adapter.getFilter(s.toString());
int textlength = s.length();
for (HashMap<String, ArrayList> wp : tempArrayList)
{
if(textlength<=wp.get("Name_").toString().length())
{
if ((wp.get("Name_").toString()).toLowerCase().contains(s.toString().toLowerCase()))
{
tempArrayList.add(wp);
}
}
}
adapter=new CustomAdapter(Fragment1.this, tempArrayList);
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after)
{}
@Override
public void afterTextChanged(Editable s)
{}
});
я не знаю, почему фильтр не работает, когда я напечатал Somthing в редактировании тексте
В этой строке 'адаптер = новый CustomAdapter (Fragment1.this, tempArrayList);' вы только инициализируетесь ваш 'adapter' после фильтрации данных по тексту изменены, но вы не установили этот адаптер в вашем списке, и вам также нужно обновить свой адаптер. Так что есть проблема. Поэтому напишите еще две строки: listview.setAdapter (адаптер); '' adapter.notifyDatasetChanged(); ' – Piyush
@piyush теперь я добавил это, но когда я печатаю что-то в списке текстовых полей, становится пустым. ни одна запись не была отображена –
Да, это означает, что вы не установили свой адаптер в listview. – Piyush