آموزش های این وب سایت به صورت رایگان در دسترس است. اطلاعات بیشتر
بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]

قرار دادن search برای ListView

تیرداد  9 سال پیش  9 سال پیش
+1 0

ضمن عرض سلام به همه دوستان

یک listView دارم ، مثل listView  هایی که استاد آموزش دادن ، میخوام یک EditTexi بالاش بزارم واسه Search  ،  دقیقا مثل دفتر تلفن گوشی ، مثلا  اون بالا  که اسم تایپ کنی ، لیست ویو ، محدود بشه به  اسم هایی که تو Search تایپ کردید ؟

0 0
باید از دیتا بیس و دستورات sql استفاده کنید (9 سال پیش)
+2 0
در addTextChangedListener مربوط به کادر جستجویتان به ازای هر تغییر لیست ویو را مجدد ست کنید و در مورد دستور sql از دستور زیر استفاده کنید "SELECT " + fieldName1 + " FROM " + table + " WHERE " + fieldName2 + " LIKE " + fieldValue (9 سال پیش)
+2 0
شما باید بعد از هربار گرفتم text از EditText یکبار لیست ویو رو از اول بسازید ، برای ساختن دوباره لیست ویو در زمانی که دارید حلقه For میزنید و new StructValue میسازید قبل از اینکه بیاید مقادیر رو وایز کنید به Values.Name مقدار اون رو چک میکیند که اگر String.Contain بود اون رو به عنوان یک مقدار ذخیره کنید بعد از ذخیره کردن اون مقدار new StructValue ساخته شده رو به Array اضافه کنید که بعد از اینکه شما کار فیلتر کردن داده درون حلقه رو به پایان رسوندید یک آداپتر بر اساس این آرایه میسازید و اون آداپتر رو میدید به لیست ویو و اطلاعات فیلتر شده شما نمایش داده میشه (9 سال پیش)
 برای این سوال 2 پاسخ وجود دارد.
پاسخ به سوال 
Reza  9 سال پیش
0 0

سلام

    روش Criss بسیار عالیه ، فقط یه اصلاحیه قرار بدم :

    اگه قرار باشه چیزی مثل دفترچه تلفن ایجاد بشه یه مشکلی داره ، اونم اینکه String.contains میاد در کل رشته ، رشته مورد جستجو رو سرچ میکنه ، که گاهی اوقات ممکنه نتیجه اشتباه بده . مثلا در لیست اسامی ، اسم های "Amir Mohammad" و "Mohammad amir" رو داریم ، حالا وقتی در کادر جستجو  "am"  تایپ میکنیم انتظار داریم تمام اسامی که با am شروع میشه نمایش داده بشه ( مثل Amir Mohammad ) ، اما با این روش  Mohammad amir  رو هم نمایش میده که اشتباهه . برای چنین مواقعی که میخوایم اطلاعاتی فیلتر بشن که با کادر جستجو شروع میشن ( نه اینکه صرفا شامل اون هستند ) بهتره که به این صورت عمل کنیم :

 

 
edtSearch.addTextChangedListener(new TextWatcher() {

            @Override
            public void onTextChanged(CharSequence searchText, int start, int before, int count) {
                
                G.namesFilter.clear();
                int searchSize = searchText.length();

                for (int i = 0; i < G.names.size(); i++) {

                    String strToBeSearched = G.names.get(i).name;

                    if (searchText.length() <= strToBeSearched.length() && strToBeSearched.substring(0, searchSize).equalsIgnoreCase(searchText.toString())) {
                        StructName name = new StructName();
                        name.name = G.names.get(i).name;
                        name.family = G.names.get(i).family;
                        name.number = G.names.get(i).number;

                        G.namesFilter.add(name);
                    }
                }

                adapter = new AdapterName(G.namesFilter);
                lstContent.setAdapter(adapter);

                adapter.notifyDataSetChanged();
            }


            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) {

            }


            @Override
            public void afterTextChanged(Editable s) {

            }
        });
 
پاسخ به سوال 
Mortez  9 سال پیش
+1 0

من یه روش ساده از stack overflow پیدا کردم که جواب داد، اونم این بود که Adapter تون را باید به جای ArrayAdapter از BaseAdapter اکستندز کنید، لینکشو براتون میذارم مطالعه کنید بازم اگه سوالی داشتید در خدمتم :) link البته این نکته رم اضافه کنم این کار برای وقتیه که آیتم دلخواهتون رو میخواید تو لیست ویو نمایش بدید در غیر این صورت اصن نیازی به Custom Adapter نیست و کار بسیار راحت تره.


پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .