hitexroid

کتابخانه ی Hitex_RecyclerView

کتابخانه ی Hitex_RecyclerView  

31 کاربر تاکنون رای داده است

  1. 1. نظر شما درباره کتابخانه ی Hitex_RecyclerView چیست؟



65 ارسال در این موضوع قرار دارد

کتابخونه ی Recycler View برای اولین بار به صورت رسمی از سایت hitexroidgroup.ir منتشر شد

قابلیت لود کردن ملیارد ها آیتم بدون کوچک ترین وقفه !

با قابلیت طراحی از طریق لیوت بیسیک و xml

دارای دو حالت افقی و عمودی

دارای دو حالت لیست و گرید

دارای ریسایکلر ویو پیجر افقی و عمودی به همراه تب لیوت (با شخصی سازی بالا)

دارای CardView و Expandable Layout

دارای متریال رفرش لیوت

دارای کتابخونه ی معروف Glide و Picasso

دارای انیمیشن و 3 مدل Fast Scroll (افقی و عمودی همراه با بالون)

دارای Header

دارای تولبار اختصاصی مجهز به SearchView متریال

دارای کتابخونه ی Paint

شخصی سازی Divider مابین آیتم ها

قابلیت تشخیص جهت اسکرول و اضافه کردن FloatingActionButton

قابلیت ایجاد آیتم با ویو های دلخواه MultipleView

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

استفاده ی خیلی آسان به همراه 130 دقیقه فیلم آموزشی رایگان

تماشای قسمت اول     ↔     دانلود سورس مثال اول

(معرفی کتابخونه و آمورش Recycler ListView)

تماشای قسمت دوم     ↔     دانلود سورس مثال دوم

(آمورش Recycler Layout View)

تماشای قسمت سوم   ↔     دانلود سورس مثال سوم

(آموزش کار با notify ها add - change - move - remove - datasetchanged)

تماشای قسمت چهارم  ↔     دانلود سورس مثال چهارم

(آموزش استفاده از Picasso ، Glide و Parallax ImageView در ریسایکلر)

تماشای قسمت پنجم    ↔     دانلود سورس مثال پنجم

(آمورش جستجو و استفاده از تولبار اخصاصی Hitex_SearchToolbar)

تماشای قسمت ششم  ↔     دانلود سورس مثال ششم

(آمورش کار با Recycler View Pager و TabLayout)

تماشای قسمت هفتم    ↔     دانلود سورس مثال هفتم

(ادامه ی آموزش ویوپیجر قسمت قبلی (ششم) + آموزش ExpandbleView)

تماشای قسمت هشتم  ↔     دانلود سورس مثال هشتم

(آمورش کار با ViewType و ساختن ویو های متعدد و دلخواه به ریسایکلر)


لینک خرید

 

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


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

با سلام یه سوالی داشتم 
 

من تازه وارد دنیای B4A شدم . من یه API طراحی کردم همانند نرم افزار دیوار . و وقتی هر رکوعستی به سمت سرور ارسال میشه . تعدادی آگهی به صورت JSON جواب داده میشه . 

زمانی که میخواستم از Recyclerview استفاده کنم . نیاز بود در زمان initialize یه مقداری رو به نام itemCount پر کنم . ( مثلا میزدیم 100 . و نرم افزار برای ما 100 تا درست میکرد )

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

 

اگر در recycler view نمیشه . آیا در HiTex Recycler View راهی هست که وقتی کاربر 20 آیتم رو اسکرول کرد . دوباره درخواست بره به سرور و آیتم های جدید رو دریافت کنه و به آیتم های قبلی اضافه کنه ؟؟

 

 

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


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

سلام در نسخه ی 6.5+ نیازی نیست توی Initialize تعداد رو وارد کنید

توی تابع LV_GetItemCount بهش List.Size رو Return میکنید

Sub LV_GetItemCount As Int
	Return List.Size
End Sub

حالا هرزمان به List شما آیتمی اضافه یا کسر بشه توسط این تابع تعداد آیتم ها بروز میشه

 

برای اینکه بتونید 10 تا 10 تا آیتم اضافه کنید ابتدا باید تشخیص بدید که کاربر به انتهای لیست رسیده یا نه.

که دو راه پیش رو دارید و میتونید از هرکدوم خواستید استفاده کنید روش اول که خیلی هم ساده هست

شما میبباستی توی رویداد onBind بنویسید

If (Position = LV.ItemCount) Then
	' کاربر به انتهای لیست رسید
End IF

 

حالا داخلش متد Downlaod که برای httpJop هست رو قرار میدید (کوئری شما باید 10 تا آیتم رو SELECT کنه) تا دانلود صورت بگیره و توی رویداد JobDone که نتیجه ی دانلود ، دریافت میشه

کد List.Add() رو قرار میدید تا به لیستتون اضافه بشه

و در نهایت برای بروز شدن لیست (خارج از حلقه) میزنید

LV.notifyDataSetChanged

 

 

روش دوم برای تشخیص رسیدن به ته لیست استفاده از کلاس Hitex_RefreshLayout هست.

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


لینک به ارسال
به اشتراک گذاری در سایت های دیگر
در 3 ساعت قبل، mgoldast گفته است :

دوست عزیز من بعد از خریداری , لینک دانلودی دریافت نکردم ؟ 

چگونه میتوانم کتابخانه ی Hitex recycler view را دانلود کنم ؟

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

من برگردم نسخه ی 4 . مشکلی نداره این نسخه ؟ یا امکانش هست یه سمپل برای نسخه ی 6.5 برای Recycler view  بهمون بدین ؟؟؟

 

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

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


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

سلام برای نسخه ی 6.5 سمپل هنگام دانلود وجود داره ! خیر بازگشت به نسخه ی 4 پیشنهاد نمیشه

احتمالا تا هفته ی آینده فیلم آموزشی مرتبط با نسخه ی 6.8 ساخته و منتشر خواهد شد .

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


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

سلام و خسته نباشید

چطور میشه تو رویداد onBind پَرِِنتِ Parent رو گرفت؟

برای مثال من زمان تعریف کردن Hitex_LayoutView بهش یه تگ میدم

حالا تو رویداد onBind میخوام اون تگ رو بخونم

Sub Activity_Create(FirstTime As Boolean)
	Dim LV As Hitex_LayoutView
	LV.Initializer("LV").ListView.Build
	LV.Tag = "SomeTag"
	Activity.AddView(LV,0,0,100%x,100%y)
	LV.Show
End Sub

Sub LV_onBindViewHolder (Parent As Panel, Position As Int)
	Dim temp As Hitex_LayoutView
	temp = Parent.Parent
	Log(temp.Tag)
End Sub

با این کد خطا بر میگرده که پَرِنتِ Parent که میشه همون ریسایکلر اینیشیالایز نیست!

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


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

سلام چه احتیاجی دارید پرنتِ پرنت رو بگیرید ؟ خود ساب بهتون پرنت رو میده

Sub LV_onBindViewHolder (Parent As Panel, Position As Int)
	Log(Parent.Parent)
End Sub

که احتمالاٌ BALayout بهتون لاگ بده

اگه پرنت خود ریسایکر منظورتونه RelativeLayout هست و با 

Log(LV.Parent)

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

اگه دسترسی مستقیم به Recycler جاوا میخواید ، باید کتابخونه JavaObject رو تیک بزنید و از متد زیر استفاده کنید (یک نمونه مثال زده شده)

	Dim OVER_SCROLL_NEVER = 2 As Int
	LV.RecyclerView.RunMethod("setOverScrollMode",Array(OVER_SCROLL_NEVER))

اگه توی Activity_Create به LV تگ دادید توی onBind از طریق Sender اون رو بگیرید

Sub LV_onBindViewHolder (Parent As Panel, Position As Int)
	Dim LVTemp As Hitex_LayoutView = Sender
	Log(LVTemp.Tag)
End Sub

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

 

بازم اگه مشکلتون رفع نشد ، بگید دقیقاً میخواید چیکار کنید تا بتونم بهتر راهنماییتون کنم

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


لینک به ارسال
به اشتراک گذاری در سایت های دیگر
در 37 دقیقه قبل، hitexroid گفته است :

سلام چه احتیاجی دارید پرنتِ پرنت رو بگیرید ؟ خود ساب بهتون پرنت رو میده


Sub LV_onBindViewHolder (Parent As Panel, Position As Int)
	Log(Parent.Parent)
End Sub

که احتمالاٌ BALayout بهتون لاگ بده

اگه پرنت خود ریسایکر منظورتونه RelativeLayout هست و با 


Log(LV.Parent)

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

اگه دسترسی مستقیم به Recycler جاوا میخواید ، باید کتابخونه JavaObject رو تیک بزنید و از متد زیر استفاده کنید (یک نمونه مثال زده شده)


	Dim OVER_SCROLL_NEVER = 2 As Int
	LV.RecyclerView.RunMethod("setOverScrollMode",Array(OVER_SCROLL_NEVER))

اگه توی Activity_Create به LV تگ دادید توی onBind از طریق Sender اون رو بگیرید


Sub LV_onBindViewHolder (Parent As Panel, Position As Int)
	Dim LVTemp As Hitex_LayoutView = Sender
	Log(LVTemp.Tag)
End Sub

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

 

بازم اگه مشکلتون رفع نشد ، بگید دقیقاً میخواید چیکار کنید تا بتونم بهتر راهنماییتون کنم

 

ممنون از پاسخگویی

ببینید صفحه اول بازار یا دیجی‌کالا یا ... رو در نظر بگیرید

یک ریسایکلر عمودی هست که داره یه سری Section ها رو لود میکنه

حالا تو هر کدوم از این Section ها یه ریسایکلر افقی وجود داره

من نیاز دارم با استفاده از Tag که به هر کدوم از ریسایکلر های افقی دادم بفهمم که onBind مربوط به کدوم Section هست و دیتا مربوط به همون رو لود کنم

 

ریساکلر افقی تو Globals معرفی نشده و بخاطر همین مستقیم قابل دسترس نیست

از طرفی هم این که برای ریسایکلر هر Section یه Event جدا بزاریم منطقی نیست! شاید 100 تا Section لود شد!

بهترین کار همون استفاده از Tag هست اما متاسفانه من موفق نشدم!

 

امیدوارم متوجه شده باشید که هدفم چیه

در واقع یک ریسایکلر هست که توش یه ریسایکلر دیگه وجود داره و هدف گرفتن Tag اون ریسایکلر Child هست

 

ممنون

 

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


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

فعلا امکان ساخت Section به صورت مستقل وجود نداره اما میتونید به صورت دستی با لیبل بسازید

Screenshot_8_.png

 

 

کد های استفاده شده

 

Sub Activity_Create(FirstTime As Boolean)
	Dim Top = 5%y As Int
	
	For i = 0 To 2
		Dim Section As Label : Section.Initialize("")
		Activity.AddView(Section,0,Top - 5%y,100%x,5%y)
		Section.Text = "Section " & i
		
		Dim LV As Hitex_LayoutView
		LV.Initializer("LV").ListView.Horizontal.Build
		Activity.AddView(LV,0,Top,100%x,30%y)
		LV.Tag = i
		LV.Show
		
		Top = Top + 35%y
	Next
End Sub
Sub LV_onCreateViewHolder (Parent As Panel, ViewType As Int)      '💎 onCreate 💎'
	Parent.Color = Colors.RGB(Rnd(0,256),Rnd(0,256),Rnd(0,256))
	Dim lbl As Label : lbl.Initialize("lbl")
	Parent.AddView(lbl,0,0,20%x,32%y)
End Sub
Sub LV_onBindViewHolder (Parent As Panel, Position As Int)         '💠 onBind 💠'
	Dim LV = Sender As Hitex_LayoutView
	Dim lbl = Parent.GetView(0) As Label
	
	Select LV.Tag
		Case 0 :
			lbl.Text = "LV 1"
		Case 1 :
			lbl.Text = "LV 2"
		Case 2 :
			lbl.Text = "LV 3"
	End Select
	
	Parent.Width = 20%x
	Parent.Height = 32%y
End Sub
Sub LV_GetItemCount As Int 								        '💯 ItemCount 💯'
 	Return 100 '/ItemList.Size
End Sub

 

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


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

آقا ممنون

با این مشکل حل شد!!!

Dim LV = Sender As Hitex_LayoutView

 

تو رویداد ریسایکلر اصلی مقدار Position رو دادم به Tag ریسایکلر داخلی که بتونم تو رویداد onBind ریسایکلر داخلی بفهمم مال Section چندم هست

Sub LV_HomePage_onBindViewHolder (Parent As Panel, Position As Int)         '* onBind *'
	Dim LV_HomePageSection = Parent.GetView(0) As Hitex_LayoutView
	LV_HomePageSection.Tag = Position
End Sub

و بعد تو رویداد onBind ریسایکلر داخلی Tag رو میگیرم و میفهم که Section چندم هست

Sub LV_HomePageSection_onBindViewHolder (Parent As Panel, Position As Int)         '* onBind *'
	Dim LV = Sender As Hitex_LayoutView
	Dim vt = HomePageItemList.Get(LV.Tag) As HomePageSection
End Sub

کلا خیلی پیچیده شده ولی خوب جواب داد :D

ممنون

ویرایش شده در توسط hitexroid
عدم نیاز به نقل قول

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


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

یه مشکل دیگه!

تو رویداد GetItemCount نمیشه Tag ریسایکلر رو گرفت (مقدار null بر میگردونه)

Sub LV_HomePageSectionItem_GetItemCount As Int 								        '$ ItemCount $'
'	Dim LV = Sender As Hitex_LayoutView
'	Dim vt = HomePageItemList.Get(LV.Tag) As HomePageSection
	Dim vt = HomePageItemList.Get(1) As HomePageSection
	Return vt.SectionData.Size
End Sub

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

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


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

سلام

من 300 ایتم اد کردم توی ریساکلر لیست ویو ولی کند اسکرول میشه و هی گیر میکنه

چیکار باید کرد

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


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

سلام

من توی ریسایکلر یه پنل دارم که توش یه چک باکسه و یه باتون

چطور توی ایتم کلیک تشخیص بدم رو کدوم کلیک شده؟

 

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


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

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

 

Dim btn As Button = Sender
btn.Text="Clicked"

 

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


لینک به ارسال
به اشتراک گذاری در سایت های دیگر
در 34 دقیقه قبل، Mohammad Jahan Ara گفته است :

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

 


Dim btn As Button = Sender
btn.Text="Clicked"

 

خب مگه با کلیک روی اون پوزیشن ایتم کلیک ریسایکلر ران نمیشه؟

من تگ ندادم تا از سندر بگیرم ک

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


لینک به ارسال
به اشتراک گذاری در سایت های دیگر
در در 10/7/2017 در 16:04، Farzin-PC گفته است :

یه مشکل دیگه!

تو رویداد GetItemCount نمیشه Tag ریسایکلر رو گرفت (مقدار null بر میگردونه)


Sub LV_HomePageSectionItem_GetItemCount As Int 								        '$ ItemCount $'
'	Dim LV = Sender As Hitex_LayoutView
'	Dim vt = HomePageItemList.Get(LV.Tag) As HomePageSection
	Dim vt = HomePageItemList.Get(1) As HomePageSection
	Return vt.SectionData.Size
End Sub

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

سلام ، هیچ نیازی نیست شما بتونید از Sender رویداد _GetItemCount استفاده کنید

یجورایی حتی فکر کردن بهش هم منطقی نیست

 

توی این ساب فقط میخواد تعداد آیتم هارو بدونه

پس یه List.Size , Cur.RowCount , Map.Size یا Array1.Length کافیه

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


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

دوست خوبم کدها واضح هستش.
طبق توضیحاتی که دادید بنده کد رو دادم خدمتتون

دیگه باقیش با شخص شماست چون هیچکس به جز شما نمیدونه چه کاری میخواد انجام بده

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


لینک به ارسال
به اشتراک گذاری در سایت های دیگر
در در 10/10/2017 در 15:23، امیرحسین گفته است :

خب مگه با کلیک روی اون پوزیشن ایتم کلیک ریسایکلر ران نمیشه؟

من تگ ندادم تا از سندر بگیرم ک

درسته با کلیک کردن رویداد کلیک خود ریسایکلر صدا زده میشه

اما شما میخوای چک باکس و  ویو های دیگه ای رو بگیری 

پس نیازه که توی رویداد منحصر به همون ویو ، کلیک تعریف کنی

و برای تشخیصش هم چاره ای جز Tag و Sender ندارید

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


لینک به ارسال
به اشتراک گذاری در سایت های دیگر
در 16 ساعت قبل، hitexroid گفته است :

سلام ، هیچ نیازی نیست شما بتونید از Sender رویداد _GetItemCount استفاده کنید

یجورایی حتی فکر کردن بهش هم منطقی نیست

 

توی این ساب فقط میخواد تعداد آیتم هارو بدونه

پس یه List.Size , Cur.RowCount , Map.Size یا Array1.Length کافیه

 

ببینید من یک لیست دارم که اطلاعات مربوط به هر آیتم توش هست (مثلاً: آیکن، اسم، قیمت،...) و نکته ای که هست اینه که اندازه این لیست متغییر هست!

یک لیست دیگه دارم که اطلاعات هر بخش رو نگه میداره (مثلاً: عنوان و همون لیست بالایی) که باز هم تعداد متغییر هست. این لیست تعداد بخش ها رو مشخص میکنه (این لیست تو Global معرفی شده و از همه جا قابل دسترس هست)

 

ریسایکلر اصلی بر اساس لیست دوم ساخته میشه

پس به اندازه این لیست بخش میسازه (پس GetItemCount برابر هست با اندازه لیست دوم که در دسترس هست)

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

برای این که تو رویداد ریسایکلر داخلی بفهمم که مربوط به کدوم بخش بوده همون جا که ریسایکلر برای هر بخش ساخته میشه مقدار Tag رو برابر مقدار Position ریسایکلر اصلی میزارم

حالا تو ریداد ریسایکلر داخلی هر بخش از طریق Sender میام Tag ریسایکلر رو میگیرم و متوجه میشم که این ریسایکلر داخلی برای کدوم بخش هست و اینجوری میتونم به لیست دوم مربوط به هر بخش دسترسی داشته باشم

Dim LV = Sender As Hitex_LayoutView
Dim ListAval = ListDovom.Get(LV.Tag) As HomePageSection

تا اینجا همه چیز درست کار میکنه

دیتا مربوط به هر بخش لود میشه و همه چیز دسته

حالا مشکل اینجاست که اندازه ریسایکلر داخلی باید بر اساس اندازه لیست اول باشه (که برای هر بخش متفاوت هست) و چون این لیست تو Global تعریف نشده مستقیم قابل دسترس نیست

پس باز هم نیاز به همچین متدی هست:

Dim LV = Sender As Hitex_LayoutView
Dim ListAval = ListDovom.Get(LV.Tag) As HomePageSection

اما این بار تو رویداد GetItemCount ریسایکلر داخلی

 

حالا مشکل من اینجاست که نمیشه تو این رویداد Sender رو گرفت که بتونم از طریق Tag بفهمم که مربوط به کدوم بخش هست که اندازه همون ریسایکلر رو مشخص کنم

 

امیدوارم توضیحات کافی بوده باشه :D

 

xxxxx.png

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


لینک به ارسال
به اشتراک گذاری در سایت های دیگر
در در 10/11/2017 در 15:33، hitexroid گفته است :

درسته با کلیک کردن رویداد کلیک خود ریسایکلر صدا زده میشه

اما شما میخوای چک باکس و  ویو های دیگه ای رو بگیری 

پس نیازه که توی رویداد منحصر به همون ویو ، کلیک تعریف کنی

و برای تشخیصش هم چاره ای جز Tag و Sender ندارید

خب وقتی ایتم کلیک صدا زده میشه دیگه ساب کلیک اون ویو ها صدا زده نمیشه

مشکل اینه

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


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

سلام

تو نسخه آخر کتابخانه ، کلاس پارالاکس و گلاید و پیکاسو حذف شدن؟ چرا؟

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


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

سلام خدمت شما

از نسخه ی 4.0 به بعد کلاس های Hitex_Glide و Hitex_Picasso از کتابخانه ی Hitex_RecyclerView جدا شده و به صورت کتابخانه های مستقل عرضه شدند .

کلاس Hitex_ParallaxImageView به دلیل مشکلات فنی حذف شد .

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


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

سلام

کسی تا حالا به صورت آنلاین به ریسایکل مثلا 10 تا 10 تا  موضوع اضافه کرده

مثلا یک نرم افزار فروش خودرو و به علت اینکه سریعتر عمل لود از سرور انجام بشه اطلاعات به صورت json از سرور میگیره اما 10 تا 10 تا

کسی از دوستان اینکار و عملی انجام داده...چون هر مرودی تو انجمن بوده فقط به صورت تئوری بوده

ممنون از پاسخگویی

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


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