رفتن به مطلب
  • 0

ذخیره کردن آخرین اسکرول در ریسایکلر ویو


siroos12

سوال

سلام دوستان و اساتید

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

میشه راهنمایی کنید

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

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

در 6 ساعت قبل، siroos12 گفته است :

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

ی تایمر درست کردم گزاشتمش تو تایمر بجاش حالا چطور بهش بگم اگه رو اولین یا آخرین بود اسکرول اولین اسکرول رو نمایش بده؟

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

 مثلا رو آیتم دوم خارج میشم میره رو پنجمی وقتی وارد شدم

بله خودمم تست کردم تو اکتیویتی کریت انجام نشد ،

سوالتون رو واضح تر بفرمایید ، صورتی که من متوجه شدم این بود که با حرکت دادن آیتم ها به بالا و پایین  اگر وقتی روی آخرین آیتم یا اولین آیتم رفتیم یه اتفاقی بیفته که بصورت زیر هست :

کدهای زیر رو توی LV_onBindViewHolder  بنویسید

اگر ریسایکلر به آخرین آیتم رفت :

If (Position+1=lv.ItemCount) Then
msgbox("به آخرین آیتم رسیدیم","")
End If

اگر ریسایکلر به ابتدا یا همون اولین آیتم اومد :

If (Position+1=1) Then
msgbox("به ابتدای آیتم ها رسیدیم","")
End If

دستورات زیر رو هم میتونید در مکان دلخواه قرار بدید :

برای حرکت به آخرین آیتم :

lv.SmoothScrollToPosition(lv.ItemCount)

برای حرکت به اولین آیتم :

lv.SmoothScrollToPosition(0)

 

بابت اون مرتب نبودن(البته فکر کنم منظورتون درست نشون ندادن هست) ، کدی که توی onbindviewholder نوشتید رو صورت زیر تغییر بدید :

Sub LV_onBindViewHolder (Parent As Panel, Position As Int) 
  
IF (position+1= lv.itemcount) then
makanscroll=Position
End IF (position+1=0) then
  makanscroll=Position
End IF (position>2) then
   makanscroll=Position-2
End IF
  
  
End Sub

 

موفق باشید:53:

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

در 2 ساعت قبل، YareGomnam گفته است :

IF (position+1= lv.itemcount) then makanscroll=Position End IF (position+1=0) then makanscroll=Position End IF (position>2) then makanscroll=Position-2 End IF

 من کاری که گفتید رو انجام دادم ولی بدتر شد اینم عکسش:

1.pngاگه هم مثل قبل بزارم این میشه:

2.pngی نکته داره که وقتی لاگ میگیرم از  دومی  همه چیز درسته ولی وقتی سیو میکنم تو فایل اعداد خراب میشن مثلا ایتم دومی سیو کردم سومی رو سیو میکنه:scratch_one-s_head:

نمیدونم چشه آخه:fekr::unknown:

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

احساس میکنم 7 تا آیه سوره حمد رو داری تو ریسایکلر قرار میدی درسته ؟

یه سوره ای رو روش کار کن آیه بیشتری داشته باشه برای تست مثل سوره مائده که آیه هاش زیاد زیادم نباشه

یکم اون خط آخر رو دست کاری کن عددشو تنظیم کن مثلا من -2 دادم تو بکنش -1 یا اصلا ورش دار ، امتحان کن ان شاءالله درست بشه ،

باز اگر اساتید لطف کنند این عزیز دل رو کمک کنند ممنونم میشم .

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

در در 12 مهر 1399 در 14:27، siroos12 گفته است :

متوجه نشدم

اصلا mydb1 از چه نوعیه؟

سورسی ندارید در این باره؟

سلام

mydb یک کلاس ماژول هست که داخلش اطلاعات دیتابیس رو به روز میکنم

شما به کاری که من کردم نداشته باشید شما فقط باید مقدار ID رو در دیتابیس ذخیره کنید 

 

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

در 22 ساعت قبل، siroos12 گفته است :

سلام دوستان و اساتید

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

میشه راهنمایی کنید

سلام دوست عزیز

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

من خودم اومدم این کار رو انجام دادم:

	If(position + 1 = lText.Size)Then
		mydb1.UpdateAkharin(2 , position)
	Else if(position = 0)Then
		mydb1.UpdateAkharin(2 , position)
	else if(position > 2)Then
		mydb1.UpdateAkharin(2 , position - 2)
	End If

ltext.size در واقع تعداد آیتم های من بود و یعنی اگر ریسایکلر روی آخرین آیتم و اولین آیتم بود بیا پازیشن خودش رو ذخیره کن و اگر از آیتم 3 به بعد بود بیا سه تا قبل رو ذخیره کن چون در متد onBindViewHolder میاد تا دو تا بعد رو هم میسازه

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

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

در در 12 مهر 1399 در 00:05، siroos12 گفته است :

سلام دوستان و اساتید

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

میشه راهنمایی کنید

سلام ، در متد onBindViewHolder با استفاده از writestring  آخرین پوزیشن رو در dirinternal  ذخیره کن بعد با شروع مجدد اکتیویتی با readstring  اون مقدار رو فراخوانی کن بعد با متد smoothscrolltoposition  به پوزیشن ذخیره شده حرکت کن .

 

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

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

در 2 دقیقه قبل، YareGomnam گفته است :

سلام ، در متد onBindViewHolder با استفاده از writestring  آخرین پوزیشن رو در dirinteral  ذخیره کن بعد با شروع مجدد اکتیویتی با readstring  اون مقدار رو فراخوانی کن بعد با متد smoothscrolltoposition  به پوزیشن ذخیره شده حرکت کن .

 

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

کدشو بنویسید که بفهمم بی زحمت

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

در 1 دقیقه قبل، siroos12 گفته است :

کدشو بنویسید که بفهمم بی زحمت

در انتهای کدهای بخش onBindViewHolder  کد زیر رو بنویسید به این شکل :

Sub LV_onBindViewHolder (Parent As Panel, Position As Int) 
  'بعد از اینکه کدهای مورد نظر رو اینجا نوشتید خط زیر رو اضافه میکنید
  dim makan as int = position
  File.WriteString(File.DirInternal,"makan.txt",makan)
End Sub

تا اینجا ریسایکلر رو هر چی بالا پایین کنید مکانش ذخیره میشه ،:

حالا باید کدی بنویسیم که با شروع برنامه ریسایکر به آخرین مکانی که ذخیره شده بره برای همین باید کدمون رو توی   Activity_Create بنویسیم ، به این شکل عمل میکنیم :

lv همون ریسایکلر ویو ماست


Sub Activity_Create(FirstTime As Boolean)

lv.show

dim makan as int = File.ReadString(File.DirInternal,"makan.txt")
lv.SmoothScrollToPosition(makan)

End Sub

اگر سوالی بود بفرمایید

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

در 7 دقیقه قبل، YareGomnam گفته است :

dim makan as int = File.ReadString(File.DirInternal,"makan.txt")

چیزی که گفتید نوشتم فورش کلوز میده این قسمت

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

در 3 دقیقه قبل، siroos12 گفته است :

چیزی که گفتید نوشتم فورش کلوز میده این قسمت

If File.Exists(File.DirInternal,"makan.txt") = True Then

Dim makan as int = File.ReadString(File.DirInternal,"makan.txt")
lv.SmoothScrollToPosition(makan)
  
End If

اون دو خط رو تو این شرط قرار بدید

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

در 2 دقیقه قبل، YareGomnam گفته است :

If File.Exists(File.DirInternal,"makan.txt") = True Then

Dim makan as int = File.ReadString(File.DirInternal,"makan.txt")

End If

این خط رو تو این شرط قرار بدید

انجام نمیشه

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

در 1 دقیقه قبل، siroos12 گفته است :

انجام نمیشه

بزرگوار ، خط زیر رو هم تو اون شرط اضافه کنید

lv.SmoothScrollToPosition(makan)
  
لینک ارسال
به اشتراک گذاری در سایت های دیگر

در 2 دقیقه قبل، YareGomnam گفته است :

بزرگوار ، خط زیر رو هم تو اون شرط اضافه کنید


lv.SmoothScrollToPosition(makan)
  

انجام نمیشه!

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

در 1 دقیقه قبل، YareGomnam گفته است :

کدایی که نوشتید رو بذارید

Sub Activity_Create(FirstTime As Boolean)
	
	Activity.LoadLayout("Layout")
	Lv.Initializer("LV").ListView.Build
	Activity.AddView(Lv, 3%x, 20%y, 94%x, 72%y)
	
	
	File.Copy(File.DirAssets, "hamd.db",File.DirInternal, "hamd.db")
	Sql.Initialize(File.DirInternal, "hamd.db",False)
	
	
	Cr1 = Sql.ExecQuery("Select * From mtn")
	Cr2 = Sql.ExecQuery("Select * From scroll")
	
	
	If File.Exists(File.DirInternal, "0.mp3") = False Then
		File.Copy(File.DirAssets, "0.mp3", File.DirInternal,"0.mp3")
	End If
	
	
	
	mp.Initialize2("MP")
	mp.Load(File.DirInternal,"0.mp3")
	
	
	Lv.Show
	
	
	Timer.Initialize("Timer",1000)
	Timer.Enabled=True
	Activity.AddMenuItem("about", "about")
	If File.Exists(File.DirInternal,"makan.txt") = True Then

		Dim makan As Int = File.ReadString(File.DirInternal,"makan.txt")
		
	End If
	Lv.SmoothScrollToPosition(makan)
	End Sub


Sub Lv_onBindViewHolder (Parent As Panel, Position As Int)
	Dim Panel As Panel = Parent.GetView(0)
	Dim Label1 As Label = Panel.GetView(0)
	Dim Label2 As Label = Panel.GetView(1)
	
	Cr1.Position = Position
	
	
	Label1.Text = Cr1.GetString("arabi")
	Label1.TextSize = SizeArabic	

	Label2.Text = Cr1.GetString("farsi")
	Label2.TextSize = SizeFarsi
	
	Label1.Typeface=Typeface.LoadFromAssets("QuranTaha.ttf")
	Label2.Typeface=Typeface.LoadFromAssets("IranNastaliq_0.ttf")
	
	Label1.Height = Utils.GetTextHeight(Label1)
	Label2.Height = Utils.GetTextHeight(Label2)
	Label2.Top = Label1.Height + 3%y
	
	If B = True Then
		Panel.Height = Label1.Height + Label2.Height + 5%y
	Else If B = False Then
		Panel.Height = Label1.Height + 3%y
	End If
	Parent.Height = Panel.Height + 2%y
	
	
	Dim makan As Int = Position
	Position=Cr2.Position
	File.WriteString(File.DirInternal,"makan.txt",makan)

End Sub

 

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

در 2 دقیقه قبل، siroos12 گفته است :

Sub Activity_Create(FirstTime As Boolean)
	
	
	If File.Exists(File.DirInternal,"makan.txt") = True Then

		Dim makan As Int = File.ReadString(File.DirInternal,"makan.txt")
		
	End If
	Lv.SmoothScrollToPosition(makan)
	End Sub


Sub Lv_onBindViewHolder (Parent As Panel, Position As Int)
	Dim makan As Int = Position
	Position=Cr2.Position
	File.WriteString(File.DirInternal,"makan.txt",makan)

End Sub

 

Lv.SmoothScrollToPosition(makan) رو زیر end if  قرار دادید ، درحالی که باید توی شرط باشه

ضمنا خط زیر رو حدف کنید :

Position=Cr2.Position

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

در 4 دقیقه قبل، YareGomnam گفته است :
در 8 دقیقه قبل، siroos12 گفته است :

 

Lv.SmoothScrollToPosition(makan) رو زیر end if  قرار دادید ، درحالی که باید توی شرط باشه

ضمنا خط زیر رو حدف کنید :

Position=Cr2.Position

انجام دادم اسکرول نمیکنه

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

در 1 دقیقه قبل، siroos12 گفته است :

انجام دادم اسکرول نمیکنه

  ببخشید یه جای کار اشتباه کردم

توی گلوبال یه متغیر تعریف کنید به این شکل :

dim makanscroll as int

 

کد هایی که توی onbindviewholder  نوشتیم رو به اینصورت تغییر بدید و اضافه رو پاک کنید :

Sub LV_onBindViewHolder (Parent As Panel, Position As Int) 
  
  makanscroll=makan
  
End Sub

بعد توی کلیک خروج از برنامه این کد رو بنویسید :

Sub Activity_KeyPress (KeyCode As Int) As Boolean
	If KeyCode = KeyCodes.KEYCODE_BACK Then
	File.WriteString(File.DirInternal,"makan.txt",makanscroll)
	End If
End Sub

توی اکتیویتی کریت هم به همون شکل قبل

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

در 5 دقیقه قبل، YareGomnam گفته است :

  ببخشید یه جای کار اشتباه کردم

توی گلوبال یه متغیر تعریف کنید به این شکل :


dim makanscroll as int

 

کد هایی که توی onbindviewholder  نوشتیم رو به اینصورت تغییر بدید و اضافه رو پاک کنید :


Sub LV_onBindViewHolder (Parent As Panel, Position As Int) 
  
  makanscroll=makan
  
End Sub

بعد توی کلیک خروج از برنامه این کد رو بنویسید :


Sub Activity_KeyPress (KeyCode As Int) As Boolean
	If KeyCode = KeyCodes.KEYCODE_BACK Then
	File.WriteString(File.DirInternal,"makan.txt",makanscroll)
	End If
End Sub

توی اکتیویتی کریت هم به همون شکل قبل

باور کنید نشد

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

در 12 ساعت قبل، Mthzf1384 گفته است :

سلام دوست عزیز

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

من خودم اومدم این کار رو انجام دادم:


	If(position + 1 = lText.Size)Then
		mydb1.UpdateAkharin(2 , position)
	Else if(position = 0)Then
		mydb1.UpdateAkharin(2 , position)
	else if(position > 2)Then
		mydb1.UpdateAkharin(2 , position - 2)
	End If

ltext.size در واقع تعداد آیتم های من بود و یعنی اگر ریسایکلر روی آخرین آیتم و اولین آیتم بود بیا پازیشن خودش رو ذخیره کن و اگر از آیتم 3 به بعد بود بیا سه تا قبل رو ذخیره کن چون در متد onBindViewHolder میاد تا دو تا بعد رو هم میسازه

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

متوجه نشدم

اصلا mydb1 از چه نوعیه؟

سورسی ندارید در این باره؟

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

بایگانی شده

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

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

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