onCreateViewholder

پرسیده شده
فعالیت 1392 روز پیش
دیده شده 658 بار
1

سلام سلام

وقتی ما 20 تا ایتم داریم ، 20بار هم متد oncreateviewholder صدا زده میشه واجرا میشه، حالا کی قضیه reuse اتفاق میفته ؟ 

فایل پیوست

3
حذف شده

 درسته.اول پیشنهاد من این هست اولین جلسه همین سر فصل که به صورت پاورپوینت عمل بازیافت توضیح داده شده رو  دوباره ببینی  (چون به صورت تصویری جواب اونجاست و همچنین بحث ریساکلر ویو بسیااااااار مهمه و توی همه پروژه ها تا الان بوده )
اما متنی:فرض کن صف نونوایی داریم که هر کی نون گرفت این از صف خارج میشه  و *دوباره به انتهای صف میره تا این عمل بازیافت انجام شه (فرض کن هشت نفر در صف باشن پس آیتم اول میره و جای نفر هشتم قرار میگیره که دوباره نون بگیره )
دقیقا همچین چیز ای رو ما در آداپتر داریم که وقتی آیتمی نون شو گرفت نمیره خونه بلکه به انتهای صف میره تا دوباره نون بگیره  و این عمل مادامی ادامه پیدا میکنه که کاربر اسکرول نکنه و یا از اپ خارج بشه.
در ابتدای کار و برای اولین بار وقتی فردی نونشو گرفت هم متد onCreateViewHolder , هم onBindViewHolder صدا زده میشود 
ولی از دفعه دوم به بعد فقط متد onBindViewHolder صدا زده میشود.(که این نیاز مند اسکرول کاربر هست)

صرفا هم این مثال رو زدم تا درک بهتری داشته باشی 

امدیوارم مثال خوبی بوده باشه 

 

فایل پیوست

پوریا شفیعی

توسط

پوریا شفیعی

30 خرداد 99

2
حذف شده

سلام و وقت بخیر 

وقتی شما ۲۰ آیتم داشته باشید ۲۰ بار متد oncreateviewholder صدا زده نمیشود 

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

در عکسی که پیوست کردم زمانی هست که ما یک RecyclerView  رو به اکتیویتی یا فرگمنت مربوطه اضافه کردیم و تعداد نمایش آیتم ها ۹ عدد هست پس متد oncreateviewholder فقط ۹ بار صدا زده میشه (میتونین لاگ بگیرین و این مورد رو مشاهده بفرمایید)

و کال شدن متد oncreateviewholder تا زمانی ادامه خواهد داشت که شما اسکرول کنین و این ۹ آیتم وارد صفحه شوند به عبارتی inflate شوند

نکته : اگر آیتمی تکراری وارد صفحه شود این متد دیگر کال نخواهد شد

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

اما متد  onBindViewHolder  از همان ابتدای کار (شروع اسکرول تا انتهای اسکرول یعنی اخرین آیتم صدا زده میشود) و به طور ساده عرض کنم  مادامی که آیتمی وارد صفحه شود (عمل بازیافت) این متد یعنی onBindViewHolder صدا زده خواهد شد.(بر خلاف متد onCreateViewHolder )

حتما خودتون log بگیرید و تست کنین و به این صحبت اکتفا نفرمایید 

پیروز باشین

 

فایل پیوست

پوریا شفیعی

توسط

پوریا شفیعی

30 خرداد 99

0
حذف شده

پوریا سلام

من لاگ گرفتم و دیدم مثلا وقتی کلا 20تا ایتم داریم ، ولی 7تا ایتم در صفحه قابل نمایش هست، همون 7بار (8بار) این oncreate صدا زده میشه، وقتی اسکرول می کنیم به پایین دوباره صدا زده میشه و به اندازه 20بار صدا زده میشه تا واسه همه ایتم ها ساخته بشه و 20بار عمل inflate کردن انجام میشه،اما بعدش دیگه موقع اسکرول کردن های تکراری دیگه صدا زده نمیشه، حالا اینکه چه زمانی این ایتم اولی میاد جای هشتمی میشینه رو درک نمی کنم ..

نمی دونم شاید مطلب رو نگرفتم . 

فایل پیوست

محمدصادق صرافیان

توسط

محمدصادق صرافیان

30 خرداد 99

0
حذف شده

سلام آقا پوریا. روزت پر از کدهای تمیز و درست و بدون باگ پسر.

 

 پاورپوینت اولین جلسه همین سر فصل که به صورت عمل بازیافت توضیح داده شده کجاست؟ که شما توی پاسخ به این سئوال مطرح کردی.

فایل پیوست

پژمان آزاد

توسط

پژمان آزاد

16 تیر 99