رفتن به مطلب

معادل دستور clear لیست ویو در اسکرول ویو


porya

ارسال‌های توصیه شده

با عرض سلام و احترام خدمت همه دوستان عزیز

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

خب اول میام متغییر هامون رو تعریف میکنم.

Sub Process_Globals
	Dim sql1 As SQL
	Dim cursor1 As Cursor
End Sub

Sub Globals
Private ScrollView1 As ScrollView
Private Label1 As Label
Dim stop As Int = 1%y
Private EditText1 As EditText
End Sub 

از متغییرهای sql و cursor برای استفاده از دیتابیس و متغییرهای ScrollView1 و stop برای ساخت مولتی پنل و متغییر label برای نمایش مقدار گرفته شده از دیتابیس و متغییرEditText1 برای سرچ در مولتی پنل استفاد میکنیم.

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

Sub Activity_Create(FirstTime As Boolean)
	
	Activity.LoadLayout("scv")

	If File.Exists(File.DirInternal,"porya.db") = False Then
	File.Copy(File.DirAssets,"porya.db",File.DirInternal,"porya.db")
	End If
	
	If sql1.IsInitialized = False Then
	sql1.Initialize(File.DirInternal,"porya.db",True)
	End If
	
	cursor1 = sql1.ExecQuery("SELECT * FROM porya")

	For i = 0 To cursor1.RowCount-1
	cursor1.Position = i
	
	Dim p As Panel
	p.Initialize("p")
	ScrollView1.Panel.AddView(p,0,stop,88.2%x,100%y)
	stop = stop + 16%y
	p.LoadLayout("multi")
	Label1.Text = cursor1.GetString("name")
	Label1.TextSize = 23
	Label1.Gravity = Gravity.CENTER
	Label1.TextColor = Colors.Black
	
	ScrollView1.Panel.Height = stop
		
	Next


End Sub 

و بعد با استفاده ازEditText1 و رویداد (Sub EditText1_TextChanged (Old As String, New As String میام سرچ رو انجام میدیم.

Sub EditText1_TextChanged (Old As String, New As String)

	ScrollView1.Panel.RemoveAllViews
	stop = ScrollView1.Height - ScrollView1.Height
	ScrollView1.ScrollPosition = stop
	
	cursor1 = sql1.ExecQuery("SELECT * FROM porya WHERE name LIKE '%" & EditText1.Text & "%'")


	For i = 0 To cursor1.RowCount-1
	cursor1.Position = i
	
	Dim p As Panel
	p.Initialize("p")
	ScrollView1.Panel.AddView(p,0,stop,88.2%x,100%y)
	stop = stop + 16%y
	p.LoadLayout("multi")
	Label1.Text = cursor1.GetString("name")
	Label1.TextSize = 23
	Label1.Gravity = Gravity.CENTER
	Label1.TextColor = Colors.Black
	
	ScrollView1.Panel.Height = stop
		
	Next
		
End Sub 

به این چند خط کد زیر دقت کنید این کدها دقیقا اون کار اصلی یعنی همون clear کردن ایتم ها رو انجام میده اگه این چند خط کد رو بردارید می بینید که با هربار سرچ ایتم ها به صورت تکرار و پشت سرم هم قرار میگیرند اما با استفاده از این چند خط کد میتوانید این مشکل رو برطرف کنید این کدها میاد ایتم های قبلی رو پاک میکنه و شروع ایتم های بعدی رو با استفاده از متغییر top به جای همون ایتم های قبلی که پاک کردیم قرار میده با کمی خلاقیت میتونید این کدها رو در جاهای که مشکلاتی که پیش تر عرض شد وجود داشت استفاده کنید.

	ScrollView1.Panel.RemoveAllViews
	stop = ScrollView1.Height - ScrollView1.Height
	ScrollView1.ScrollPosition = stop 

خیلی ممنون که بنده رو همراهی کردید امیدوارم از این اموزش راضی و براتون مفید بوده باشه. :give_rose:
موفق باشید. :cheshmak:

لینک ارسال
به اشتراک گذاری در سایت های دیگر

بایگانی شده

این موضوع بایگانی و قفل شده و دیگر امکان ارسال پاسخ نیست.

  • کاربران آنلاین در این صفحه   0 کاربر

    • هیچ کاربر عضوی،در حال مشاهده این صفحه نیست.
×
×
  • اضافه کردن...