آموزش ساخت جستجوی زنده در بیسیک فور اندروید
سلام
با یک آموزش دیگه از بیسیک فور اندروید در خدمتتون هستیم، در برنامه های مختلفی که در گوشی استفاده میکنید حتما دیدید وقتی در قسمت سرچ یک کلمه رو تایپ میکنید، عنوان های مرتبط با همون کلمه لیست میشن و نمایش داده میشن، امروز در بیسیک فور اندروید چنین چیزی را میخواهیم بسازیم، پس در ادامه همراه بپرسم باشید.

جستجوی زنده در b4a
این روش خیلی پیچیده نیست، اما شاید برای برخی از افراد کاربردی باشد.
جستجوی زنده یعنی این که کاربر در یک جعبه متن حرفی را وارد کند، برنامه تمام گزینه هایی را که در آن، این حرف استفاده شده است را آنی نمایش دهد. به این نوع جستجو در اصطلاح جستجوی زنده یا Live Searh می گویند.
آموزش:
- ابتدا یک EditText و یک ListView در برنامه تعریف میکنید.
- سپس در قسمت TextChanged ابراز EditText دستور زیر را بنویسید:
۱ ۲ ۳ ۴ ۵ ۶ ۷ ۸ ۹ ۱۰ ۱۱ ۱۲ ۱۳ ۱۴ ۱۵ ۱۶ ۱۷ ۱۸ ۱۹ ۲۰ ۲۱ ۲۲ ۲۳ ۲۴ ۲۵ ۲۶ ۲۷ ۲۸ ۲۹ ۳۰ |
Sub Globals Dim sql1 As SQL Private lbl_result As Label Private txt_search As EditText Dim c As Cursor Private lst_result As ListView End Sub Sub Activity_Create(FirstTime As Boolean) Activity.LoadLayout("main") If File.Exists(File.DirRootExternal,"test.db")=False Then File.Copy(File.DirAssets,"test.db",File.DirRootExternal,"test.db") End If If sql1.IsInitialized=False Then sql1.Initialize(File.DirRootExternal,"test.db",True) End If End Sub Sub txt_search_TextChanged (Old As String, New As String) c=sql1.ExecQuery("SELECT * FROM tbl_test WHERE test LIKE '%"&txt_search.Text&"%'") For i=۰ To c.RowCount-۱ c.Position=i lst_result.AddSingleLine(c.GetString("test")) If txt_search.Text="" Then lst_result.Clear End If Next End Sub |
در دستورات بالا، ابتدا اشیا و کتابخانه ها را تعریف کردیم و سپس در بخش Activity_Create آمدیم و دیتابیس رو داخل کارت حافظه گوشی کپی کردیم و در بخش TextChanged دستورات اصلی را نوشتیم.
در EditText هر تغییری که انجام بشه(شامل تایپ کردن کلمه و حذف کلمه) رویداد TextChanged اجرا میشه؛ در واقع ما گفتیم که هر کلمه ای که در EditText تایپ شد به صورت آنی و در لحظه(زنده) در دیتابیس بگرد و نتایج جستجو رو نشون بده.
در دستور LIKE، به علامت های درصد و تک کتیشن ها و دابل کوتیشن ها دقت کنید، این علائم در سرچ بسیار تاثیر گذارند.
حالا سعی میکنیم در پست های بعدی بیشتر درمورد این علائم و نشانه ها مطلب بنویسیم.
موفق باشید.
دیدگاه ( 2 )
از من از نوع: listView1.addtwolines هست که این الگوریتم بهش نمی خونه!!
خب شما این دستور رو جایگزین کن
تشکر. همین قسمت رو گذاشتم ولی هیچ حرکتی صورت نداد.
For i=۰ To listview1.Size-۱ Dim g As String g=listview1.Getitem(i) If g.Contains(EditText1.Text)=True Then ListView1.AddtwoLines(g,"") End If Next If ListView1.Size=۰ Then ToastMessageShow("هیچ آیتمی یافت نشد",False) End If
داخل دابل کوتیشین رو خالی گذاشتم.
خب، باید یادبگیری که EditText1 یک رویداد نیست. بلکه نام شیء هست که داری ازش استفاده میکنی
نام رویداد شما TextChanged هست.
اگه سورستو میذاشتی که بررسی کنم بهتر میتونستم کمکت کنم.
حاجی شما این کدو بذار داخل برنامت ببین خطاش چیه
الان خطا نمیده. ولی کلا هرچی مینویسم پاشو کرده تو یه کفش که هیچ آیتمی یافت نشد!!
توی رویداد
EditText1
خطاش روی g=l.Get(i) بود. متن پیامشم:
java.lang.IndexOutOfBoundsException: Invalid index 0, size is 0
ولی وقتی کد را روی رویداد کلیک دکمه جستجو بردم بدون فورس کلوز فقط میگه چیزی پیدا نشد.
شما باید L رو از نوع list تعریف کنید
فقط list هست که پارامتر get داره
سلام” کلی کد تغییر دادم، حذف و اضافه کردم، داخل همه جور سایتی گشتم.. اما به محض نوشتن اولین حرف داخل ادیت تکست روی خط شماره ۵ خطای
java.lang.IndexOutOfBoundsException: Invalid index 0, size is 0
میده و از برنامه خارج میشه.
اولا که این خط کجاست؟
دوما چرا اینقدر نافرم کدهارو توی سایت قرار دادی؟!!
یه اینتر میزدی مرتبشون میکردی.
نمیدونم شما L رو چی تعریف کردید. من برداشتم لیست ویو بوده. ولی بازم خطا داده. هر طوری که تغییر میدم بازم خطا می ده.
کدهای شمارو بر اساس برنامه خودم تغییر دادم
سلام” تشکر. اما اگه دیتابیس نداشتیم و خواستیم از داخل همین لیست ویو فعلی سرچ کنه چی؟؟
سلام.
خواهش میکنم.
به نظرم از این الگوریتم استفاده کن