عضویت در سایت

ورود

فراموشی رمز عبور

رمز عبور خود را فراموش کرده اید؟ ایمیل خود را وارد کنید

ورود

عضویت در سایت

رایگان ثبت نام کنید و سوالات خود را بپرسید، همچنین میتوانید در پاسخگویی به سوالات دیگر کاربران نیز سهیم باشید، هر مشکلی در ثبت نام یا ورود داشتید با ایمیل beporsam@gmail.com در ارتباط باشید

در بین 1171 آموزش و 2026 پرسش به دنبال چه هستید؟

ویندوز
نصب آنلاین ویندوز

ویندوز 7,8,10,11
مشاوره
مشاوره خرید لپ تاپ و کامپیوتر

مشاوره حرفه ای دریافت کن
بلاگ
مقالات آموزشی

1k+
پشتیبانی آنلاین

سخت افزار/نرم افزار

آموزش ساخت جستجوی زنده در بیسیک فور اندروید

سلام

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

جستجوی زنده در b4a

جستجوی زنده در 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=0 To c.RowCount-1
		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، به علامت های درصد و تک کتیشن ها و دابل کوتیشن ها دقت کنید، این علائم در سرچ بسیار تاثیر گذارند.

مطلب پیشنهادی:  توابع وردپرس - توابع پیوند کوتاه

حالا سعی میکنیم در پست های بعدی بیشتر درمورد این علائم و نشانه ها مطلب بنویسیم.

موفق باشید.

درباره مرتضی صباغیهمکار سایت

💎 اپ های من در مایکت https://myket.ir/developer/dev-53936 گروه تلگرامی MR.B4A ( سورس کد و کتابخانه ) https://t.me/programmingwithb4a

دنبال کردن

دیدگاه ( 2 )

  1. از من از نوع: listView1.addtwolines هست که این الگوریتم بهش نمی خونه!!

    • خب شما این دستور رو جایگزین کن

      ListView1.AddTwoLines(g,"")
      • این دیدگاه ویرایش شده است

        تشکر. همین قسمت رو گذاشتم ولی هیچ حرکتی صورت نداد.
        For i=0 To listview1.Size-1
        Dim g As String
        g=listview1.Getitem(i)
        If g.Contains(EditText1.Text)=True Then
        ListView1.AddtwoLines(g,"")
        End If
        Next
        If ListView1.Size=0 Then
        ToastMessageShow("هیچ آیتمی یافت نشد",False)
        End If

        داخل دابل کوتیشین رو خالی گذاشتم.

        • خب، باید یادبگیری که EditText1 یک رویداد نیست. بلکه نام شیء هست که داری ازش استفاده میکنی

          نام رویداد شما TextChanged هست.

          اگه سورستو میذاشتی که بررسی کنم بهتر میتونستم کمکت کنم.

        • حاجی شما این کدو بذار داخل برنامت ببین خطاش چیه

          Sub Button1_Click
          	ListView1.Clear
          	For i=0 To l.Size-1
          		Dim g As String
          		g=l.Get(i)
          		If g.Contains(EditText1.Text)=True Then
          		ListView1.AddTwoLines(g,"")
          		End If
          	Next
          	If ListView1.Size=0 Then
          		ToastMessageShow("هیچ آیتمی یافت نشد",False)
          	End If
          End Sub

           

          • سینا کاربر تازه
            20/04/05 در 00:05
            این دیدگاه ویرایش شده است

            الان خطا نمیده. ولی کلا هرچی مینویسم پاشو کرده تو یه کفش که هیچ آیتمی یافت نشد!!

            توی رویداد

            EditText1

            خطاش روی g=l.Get(i) بود. متن پیامشم:

            java.lang.IndexOutOfBoundsException: Invalid index 0, size is 0

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

        • شما باید L رو از نوع list تعریف کنید

          فقط list هست که پارامتر get داره

          • سینا کاربر تازه
            20/04/04 در 18:47
            این دیدگاه ویرایش شده است

            سلام” کلی کد تغییر دادم، حذف و اضافه کردم، داخل همه جور سایتی گشتم.. اما به محض نوشتن اولین حرف داخل ادیت تکست روی خط شماره 5 خطای

            java.lang.IndexOutOfBoundsException: Invalid index 0, size is 0

            میده و از برنامه خارج میشه.

            Sub EditText1_TextChanged (Old As String, New As String)
            	l.Initialize
            	For i=0 To 113
            		Dim g As String
            		g=l.Get(i)
            		If g.Contains(EditText1.Text)=True Then
            		ListView1.AddtwoLines(g,"")
            		End If
            	Next
            	If ListView1.Size=0 Then
            		ToastMessageShow("هیچ آیتمی یافت نشد",False)
            	End If
            
            End Sub

             

        • اولا که این خط کجاست؟

          g=l.Get(i)

          دوما چرا اینقدر نافرم کدهارو توی سایت قرار دادی؟!!

          یه اینتر میزدی مرتبشون میکردی.

          • سینا کاربر تازه
            20/04/04 در 09:51
            این دیدگاه ویرایش شده است
            Sub EditText1_TextChanged (Old As String, New As String)
            For i=0 To l.size-1
            		Dim g As String
            		g=l.Get(i)
            		If g.Contains(EditText1.Text)=True Then
            		ListView1.AddtwoLines(g,"")
            		End If
            	Next
            	If ListView1.Size=0 Then
            		ToastMessageShow("هیچ آیتمی یافت نشد",False)
            	End If
            End Sub

            نمیدونم شما L رو چی تعریف کردید. من برداشتم لیست ویو بوده. ولی بازم خطا داده. هر طوری که تغییر میدم بازم خطا می ده.

            کدهای شمارو بر اساس برنامه خودم تغییر دادم

  2. سلام” تشکر. اما اگه دیتابیس نداشتیم و خواستیم از داخل همین لیست ویو فعلی سرچ کنه چی؟؟

    • سلام.

      خواهش میکنم.

      به نظرم از این الگوریتم استفاده کن

      For i=0 To l.Size-1
      		Dim g As String
      		g=l.Get(i)
      		If g.Contains(EditText1.Text)=True Then
      		ListView1.AddSingleLine(g)
      		End If
      	Next
      	If ListView1.Size=0 Then
      		ToastMessageShow("هیچ آیتمی یافت نشد",False)
      	End If

       

ارسال نظر

رفتن به بالا

سامانه آموزشی و خدماتی بپرسم

اولین وب سایت آموزشی و پرسش و پاسخ در ایران

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