ایجاد فیلتر برای لیست ویو سفارشی
من با استفاده از اموزش های استاد یک لیست ویو سفارشی ایجاد کردم و در بالای آن یک ادیت باکس برای جستجو قرار دادم و میخوام کاری کنم که با ورود هر کاراکتر در لیست ویو جستجو شده و آپدیت بشه .
تا الان هم فهمیدم برای لیست ویو های ساده از دستور زیر در addTextChangedListener استفاده کنیم
adapter.getFilter().filter(s.toString());
ولی این دستور در لیست ویو کاستوم کار نمیکنه و تا جایی که من متوجه شدم باید متد get filter رو override کنیم . حالا کسی میتونه به من بگه که این متد باید کجا override بشه و اگه ممکنه روش کار رو هم به طور کامل توضیح بده .
سلام دوستان
به نظر من نیاز نیست برای جستجو بر اساس یک فیلد شما هر بار یه کوئری از دیتابیس بزنید بهتر اینه که دو تا ArrayList در کلاس G تعریف کنی
publicstaticArrayList<StructCountry>Array=newArrayList<StructCountry>();
publicstaticArrayList<StructCountry>Array_2;
حالا با یه کوئری Array را از اطلاعات پایگاه پر می کنی و بعدش Array_2 را از اطلاعات Array پر می کنی . و در نهایت لیست ویو هم با اطلاعات Array_2 پر میشه .
G.Array=newArrayList<StructCountry>(G.Array_2);
adapter =newAdapterMartyr(G.Array_2);
lstContent.setAdapter(adapter);
adapter.notifyDataSetChanged();
حالا موقعی که کاربر برو روی plainText در حال وارد کردن عبارت هست سرچی انجام می ده و نتایج را نشون می ده .
edt1.addTextChangedListener(newTextWatcher(){
@Override
publicvoid onTextChanged(CharSequence s,int arg1,int arg2,int arg3){
String searchString = edt1.getText().toString().trim();
int textLength = searchString.length();
G.Array_2.clear();
StringRsearch="";
for(int i =0; i <=(G.Array.size()-1); i++){
if(seter ==1){
Rsearch= G.Array.get(i).فیلدموردنظر;
}
if(seter ==2){
Rsearch= G.Array.get(i).فیلدموردنظر;
}
if(seter ==3){
Rsearch= G.Array.get(i).فیلدموردنظر;
}
if(seter ==4){
Rsearch= G.Array.get(i).فیلدموردنظر;
}
if(seter ==5){
Rsearch= G.Array.get(i).name;
}
if(textLength <=Rsearch.length()){
if(searchString.equalsIgnoreCase(Rsearch.substring(0, textLength)))
G.Array_2.add(G.Array.get(i));
}
}
adapter.notifyDataSetChanged();
}
در واقع با این کار به جای اینکه هر بار کوئری در پایگاه زده بشه و نتایج در لیست ویو نمایش داده بشه ، ای سرچ درون Array انجام میشه و نتیجه در Array_2 ریخته مشه و در نهایت هم در لیست ویو نمایش داده می شود .
پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .