دوره مجازی اندروید (جلسه 10): پیاده سازی لیست با RecyclerView



visibility  
mode_comment   ۱۱۸

به نام خدا. سلام، توی این جلسه می خواهیم یک لیست رو با استفاده از RecyclerView پیاده سازی کنیم و با مفاهیم Model ، Adapter و LayoutManager آشنا بشویم. همچنین در آخر جلسه ScrollView رو هم معرفی می کنیم.

مطالب مطرح شده در این جلسه عبارتند از :

  • Recycler View چیست؟
  • List View چیست؟
  • تفاوت های ListView و Recycler View
  • پیاده سازی لیست با Recycler View
    • آشنایی با مفهوم Recycling
    • آموزش کار با Adapter
    • آموزش کار با ViewHolder
    • معرفی LayoutManger
    • پیاده سازی لیست تک ستونه با Linear Layout Manager
    • پیاده سازی لیست های چند ستونه با Grid Layout Manger
    • پیاده سازی لیست افقی
    • پیاده سازی لیست های در هم ریخته Staggered Layout Manager
  • معرفی و استفاده از ScrollView
info توجه

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

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

comment دیدگاه کاربران
parsiboy replyپاسخ

ممنون از حل مشکل جا نشدن View ها

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

با تشکر

لقمان آوند

بله باید وقت بیشتری برای تمرین بزارید و چند بار ویدیو رو ببینید اگر متوجه نشدید .

امیر غلامی replyپاسخ

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

سعید شاهینی

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

milad boos

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

جعفر پیشدادی replyپاسخ

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

سعید شاهینی

سلام، دریافت اطلاعات از سرور آموزش داده می شه ولی اینکه با وردپرس باشه یا php هنوز مشخص نیست.

امین حیدری

جناب مهندس سلام
کلا باید برای دریافت اطلاعات از سرور برای اندروید از php استفاده بشه ؟
یا در این دوره با php آموزش داده میشه ؟
خواهشمندم اگر اینگونه هست با وردپرس نباشه ، چون بعضی از دوستان مثل بنده اصلا برای کار با وردپرس برای این دوره ثبت نام نکردیم و کاری هم بهش نداریم ; اگر با php آموزش داده بشه بهتره نسبت به وردپرس

لقمان آوند

سلام
در این دوره با php هست و طبیعتا با زبان های سمت سرور دیگه هم میشه اینکارو کرد .
احتمالا در این دوره با خود php هست …

sara salami replyپاسخ

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

لقمان آوند

سلام
واقعا همه موارد رو نمی شه در یک دوره گنجوند. اونطوری باید 1 سال دوره ادامه دار شه و شاید تا 200 ساعت هم بشه!
ولی سعی می کنیم درخواست های خاص و موارد اینچنینی رو بعد از اتمام این دوره در قالب دوره های کوتاه و کم هزینه تدریس کنیم.

sara salami

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

amir.ramin76 replyپاسخ

سلام
لطفا طرز استفاده از Font Awesome در برنامه ها برای آیکون ها هم توضیح بدین.
ممنون

سعید شاهینی

سلام، به جای فونت awsome احتمالا استفاده از vector رو آموزش خواهیم داد.

مرتضی replyپاسخ

ممنون از اموزشتون

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

لقمان آوند

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

Javad Abbasi replyپاسخ

استاد آوند عزیز و مهندس شاهینی
من واقعا خیلی کار کردم و روی یکسری از چیزها قبلا مشکل داشتم که این پکیج رو خریدم :
1-پرداخت درون برنامه ای
2-عضویت و ارتقا عضویت آنلاین
3- بروزرسانی دیتابیس افلاین به وسیله دیتابیس انلاین (فقط آپدیت رکورد جدید)
4-دانلود منیجر فایل
5-فروشگاه

سعید شاهینی

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

Mr abbas replyپاسخ

سلام چندتا مشکل بوجود اومد واسه من تو این پروژه ولی در نهایت درست شد
اول این بود که وقتی داشتید یه recyclerview به لایوت activity_last_news اضافه میکردید در قسمت پرویو
یه ارور اومد که ارور رندرینگ بود و ضربدر زدید این قضیش چی بود؟من خودم با اندروید 24 مینوشتم این ارور اومد زدم پروژه با اندروید 23 لود بشه و وقتی اینکارو کردم اروره رندرینگ رفتش.سرچ کردم تو اینترنت نوشته بودن بخاطر اینکه لایوت منیجر اضافه نکردید تو قسمت جاوا یجا هم نوشته بود که لایبری recyclerviwe هم خونی نداره.بهرحال من خودم زدم پروژه با اندروید 23 لود بشه که درست شد بعدش هم زدم دوباره با اندروید 24 بعدش دیگه اون ارور نیومد!
مشکل بعدی این بود که توی اوتو کامپیلیته من RecourcesCompat رو نمیاورد باید اول ایمپورتشو وارد میکردم !!!ایمپورتشم از سورس شما ورداشتم.اینم یه نکته جالب بود.سرچ کردم دیدم باید یه لایبری اضافه میکردم تا بصورت اوتو کامپیلیت میاورد
support-v4 (com.android.support:support-v4:23.0.1)
همین! 😀 😀 😀 😀
یک بار هم تموم کردم این قسمتو ران کردم تو گوشی دیدم گردلی خیلی طول کشید زدم stop رو پروژه رو بستم دوباره باز کردم ولی مشکل گردلی پیدا کرد و پروژه دیگه ران نشد هرکاری کردم.مجبور شدم از اول بنویسم باز. 🙁 🙁 🙁
در کل باحال بود اموزشش مخصوصا اینکه میشه پستها رو چند جور نمایش داد در لایوت
خسته نباشید 😀

سعید شاهینی

سلام عباس جان. چرا دوباره نوشتید!!! گفتم که باید با vpn متصل باشید تا اندروید استودیو بتونه فایل های موردنیازشو دانلود بکنه و بتونه اپتون رو اجرا کنه!!! :))))

Mehdi Soli replyپاسخ

سلام آقای شاهینی عزیز، خدا قوت به شما و همین طور کلیه اعضا و استادید محترم سون لرن، ممنون از آموزش های خوب شما. واقعا لذت می برم از جلو رفتن با مطالب شما، یک نکته بود که می خواستم بگم شاید بدرد خیلی از دوستان بخوره. من هم برای بار اول یکی دو تا از آموزش های اندرویید رو خریدم و دانلود کردم اما متاسفانه بعد از گذشت چندین جلسه به مشکل برخوردم چون مفاهیم مربوط به جاوا رو اصلا خوب درک نکرده بودم (با اینکه حتی با زبان هایی چون C# در قدیم کار کرده بود اما به هر حال ، گرفتن و درک مطالب برای من سخت بود و به همین دلیل هر بار بعد از چند جلسه آموزشی رو دیدن، کلا قید اون مجموعه رو می زدم) فهمیدم که مشکل اصلی من در مفاهیم اولیه زبان جاواست که اگه به اون ها مسلط بشم می تونم به راحتی در اندرویید جلو برم، برای همین هم کلا یک شش ماه بی خیال یادگیری اندرویید شدم و شروع به یادگیری مفاهیم زبان جاوا کردم. چون هر جلسه کامنت ها را دنبال می کنم، احساس کردم خیلی از دوستان با این مفاهیم مشکل دارند و واقعا هم شما به هیچ عنوان وقت نمی کنید که این مطالب رو آموزش بدید. به همین دلیل خواستم تا یک مرجع برای یادگیری به دوستان معرفی کنم، من هم مثل شما از سایت tutorialpoints خیلی استفاده کردم، همین طور فیلم های زیاد خارجی رو دانلود کردم و خیلی از اونها را نگاه کردم (چون مشکلی در درک و فهم زبان انگلیسی ندارم) با این وجود چند وقت گذشته یکی از سایت های ایرانی رو پیدا کردم که آموزش های ویدئویی رایگان جاوا را در اینترنت منتشر می کنه، تا همین دو ماه گذشته این روند ادامه داشت و این دوره که شامل 18 بخش است بطور کامل منتشر شد. به جرات می تونم یکی از بهترین مراجع برای یادگیری مفاهیم پایه جاوا و همین طور شی گرایی هستش. واقعا حیفم اومد که به دوستان و همین طور شما معرفی نکنم، اگر وقت کردید حداقل اسلاید های مربوط به درس هایی که در این مجموعه داده میشه رو دانلود کنید تا به جامعیت اون پی ببرید. من واقعا خیلی چیزها از این مجموعه یاد گرفتم و از همه مهمتر اینکه این بار، اموزش اندرویید نه تنها برای من سخت نیست بلکه واقعا لذت بخش است چون تمامی اون مفاهیم برای من در حال تکرار شدن است. تمامی مواردی که شما ذکر می کنید در این مجموعه به تشریح بیان شده و اگر دوستان می خواهند که واقعا از تدریس شما لذت ببرند، توصیه می کنم حتما دیدن این مجموعه رو به برنامه خودشون اضافه کنند. باز هم تشکر بسیار فراوان از شما و خدمات ارزشمند شما
لینک زیر مربوط به سایت جاواکاپ است که با سرچ در اینترنت هم می توانید به این سایت دسترسی داشته باشید. به بخش آموزش بروید و از آموزش های واقعا جامع و کامل اون لذت ببرید. امیدوارم به کار شما دوستان خوبم بیاید:

http://www.javacup.ir/javacup/index.php/2013-12-03-10-34-20/javacup-training-videos

سعید شاهینی

سلام، خیلی ممنون از لطفتون، حتما استفاده خواهیم کرد.

zeinab d replyپاسخ

سلام.
توی آموزش گفته شده recyclerview افقی از سمت چپ به راست حرکت میکنه.ولی اگه بخوایم از سمت راست به چپ حرکت بکنه چه ویژگی رو باید تنظیم بکنیم؟

سعید شاهینی

سلام، آخرین پارامتر constructor کلاس LayoutManager، نامش reverseLayout هست که اگه اون رو برابر True بکنید، RecyclerView افقی شما، راست به چپ خواهد شد.

مرتضی مرادی replyپاسخ

با سلام آموزش خیلی خوب و جامعی بودو من سوالی داشتم
چطوری باید قابلیت lazyload رو به ریسایکلیر ویوی خودمون اضافه کنیم ، یعنی مثلا در هر بار اسکرول 5 تا داده رو بگیره ، من خودم فایل جیسون رو طوری طراحی کردم که با قرار دادن یه مقدار مثلا 1 و 2 و … جلوش اون هر بار 5 داده جدید رو بگیره ولی تو ریسایکلر ویو نتونستم کامل این رو انجام بدم :

فایل php من به این آدرس هست :
http://localhost/ get_data.php?page= (mynumber)
که به جای my نامبر برای هر اسکرول یه مقدار رو میفرستم
لطفا این مورد مهم رو توضیح بدید چون بدون قابلیت lazyload ریسایکلرویو تو دیتابیس های با تعداد زیاد اطلاعات به مشکل می خوره

سعید شاهینی

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

niksaz replyپاسخ

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

سعید شاهینی

سلام، در جلسات بعدی کاملا این موضوع رو آموزش دادم

برنامه نویس replyپاسخ

با سلام بنده ویدیو جلسه دهم رو دیدم و دقیقا مثل گفته های شما پیش رفتم اما چون رم من پایینه و جنی موشن سخت بالا میاد به خاطر همین از adb driver استفاده میکنم ولی هنگام اجرا ارور (Error while Installing APK) میده چیکار باید بکنم.
و ممنون از بابت آموزش هاتون.

سعید شاهینی

سلام، باید از کنسول Run اسکرین شات بگیرید تا ببینم چه اروری دقیقاً می ده.

برنامه نویس

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

سعید شاهینی

سلام، saeedshahiniit@gmail.com

hamidreza khajeh replyپاسخ

سعید جان ایا میشه وقتایی که اطلاعات اپمون زیاد نیست و مثلا میخوایم 5پنج تا پست رو بزاریم خب؟بعد مثلا بیاییم برای هرکدوم با استفاده از ساختار سوییچ عنوان و عکس و مثلا مطلب بزنیم،خب؟! و مثلا دیگه از دیتابیس سرور استفاده نکنیم ! از همین کلاس دیتافیک جنریتور استفاده بکنیم!! آیا امکانش هست؟ از لحاظ حرفه ای گری توی مهندسی اپ چطوره ؟ ممنون میشم راهنماییم کنید

سعید شاهینی

بله می شه، اگه بیشتر از 5 تا پست نباشه، دیگه حتی نیازی به RecyclerView هم نخواهد بود، می تونید داخل یک LinearLayout پنج تا پستتون رو بسازید.

علی جعفری replyپاسخ

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

سعید شاهینی

سلام، فقط در صورتی داخل RecyclerView لگ احساس می شه که مشکلی در پیاده سازی لایوتها وجود داشته باشه، مثلاً عکس ها رو بدون مدیریت حافظه داخل لیست Load کرده باشید، یا لایوتی که برای هر آیتم ایجاد می کنید، خیلی پیچیده باشه و به پردازش زیادی نیاز داشته باشه. شما لطفاً فایل Adapter خودتون رو برام ایمیل کنید، تا ببینم مشکل از کجاست. لطفاً داخل توضیحات ایمیل مشکلتون رو هم بنویسید.

علی جعفری

در مورد این موضوع بهتون ایمیل زدم لطفا چک کنید.

امیر غلامی replyپاسخ

سلام چرا باید از List برای داده های fake استفاده کنیم آیا بهتر نیس از همون ArrayList استفاده کرد ؟ به این صورت

سعید شاهینی

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

Zahra Hosseini replyپاسخ

سلام
من تو نصب اندروید استودیو به مشکل برخوردم و برای کد زدن از eclipse استفاده می کنم… ,وقتی می نویسم resourcescompat نمیشناسه (با اینکه کمتابخونه مربوطه رو گذاشتم)… ممنون میشم اگه راهنمایی کنید

سعید شاهینی

سلام٬ الان واقعا دیگه هیچ شرکت حرفه ای از eclipse برای برنامه نویسی اندروید استفاده نمی کنه.
کتابخونه ی زیر رو هم به build.gradle اضافه کنید
compile ‘com.android.support:appcompat-v7:25.0.1’

علیرضا رحمانی replyپاسخ

با سلام دلیل به وجود اومدن ارو رOOM در زمان استفاده از ریسایکلر ویو چیه ؟؟؟من کد آداپتر رو کاملا مثل شما پیاده سازی کردم و فایل آیتمم هم زیاد پیچیده نیست ولی وقتی تعداد عکس هایی که لود میکنم از پنج تا بیشتر میشه این مشکل بوجود میاد!!! مگه اینجوری نیست که توی ریسایکلر ویو با اون روش لودی که داره نباید مشکل مموری داشته باشیم ؟؟؟ ممنون میشم کمکم کنید ! 😥

سعید شاهینی

سلام، هر تعداد عکسی که برای کاربر به نمایش درمیاد وارد memory می شه و اگر حجم عکس ها بالا باشه و هیچ کشی استفاده نکرده باشید به ارور out of memory برمی خورید. برای جلوگیری از این مشکل از عکسهای کم حجم به همراه مکانیزمی برای کش استفاده کنید.
کتابخانه های picasso ، glide، fresco وظیفه ی مدیریت حافظه را به بهترین شکل انجام می دهند.

pooya taheri replyپاسخ

با سلام من طبق آموزش های شما پیش رفتم .
یک دکمه گذاشتم تو صفحه mainactivity که یه اکتیویتی lastnews ارجاع داده بشه اما موقع باز کردن اکتیویتی
ارور میده که برنامه متوقف شده چی کار کنم؟

سعید شاهینی

سلام٬ از ارروری که داخل Logcat نمایش می ده اسکرین شات بگیرید برام ایمیل کنید.

علی غلامی replyپاسخ

با سلام استاد اگر بخواهم title ,content هام متن یکی نباشه مثل عکس ها مختلف باشه متن مربوط به هر عکس مطابق خودش باشه چیکار کنم ؟؟
لطفا جواب بدید ممنون

سعید شاهینی

سلام٬ وقتی به بحث دریافت اطلاعات به سرور برسید این موضوع رو متوجه خواهید شد. این اطلاعاتی که ما برای تست ایجاد کردیم به این شکل بود وگرنه اطلاعاتی که به صورت واقعی ساخته شده باشند قاعدتا تکراری نخواهند بود.

محمدرضا الله قلی replyپاسخ

سلام
استاد شما داخل پروژه های اندروید خودتون از کتابخوانه design:23.4.0 استفاده کردید .
ولی من هر هرکاری میکنم این کتابخوانه رو اضافه کنم ارور میده و مجبور شدم از design:24.0.0-alpha2 استفاده کنم که زیرش خظ قرمز کشیده و میگه برای اندوید های زیر 5 کار نمیکنه .
همین مشکل رو با recyclerView و appcompat دارم .
برای اضافه شدن VPN رو هم کانکت کردم ولی باز هم نشد .
مشکل از کجاست ؟؟
تشکر

سعید شاهینی

سلام٬ مشکل شما به دلیل اینکه آخرین ورژن android support library رو نصب نکردید. باید از sdk manager برای آپدیت کردن support library اقدام کنید.

محمدرضا

سلام مجدد
من SDK Manager رو چک کردم ولی نتونستم android support library رو آپدیت کنم
دکمه ی آپدیت کار نکرد براش
جلوش هم علامت آپدیت نبود
مشکل از کجای کارمه ؟؟؟؟؟؟؟؟

سعید شاهینی

سلام، اگه از آخرین ورژن اندروید استودیو استفاده می کنید. متاسفانه Sdk manager ای که به صورت مستقل کار می کرد حذف شده ولی می تونید از مسیر C:\Users\You\AppData\Local\Android\sdk اون رو اجرا کنید.

رضا رمضانزاده replyپاسخ

سلام استاد خسته نباشید… من در انتها که کدی که نوشتم را اجرا می کنم با پیغام ” unfortunately application has stoped” روبرو میشم… یعنی اپلیکیشن واسه یه ثانیه میاد بالا و بدون اینکه چیزی نشون بده سریع این ارور نمایش داده میشه…همه رو هم چک کردم کدم مطابق کد شماست… مشکل از کجا می تونه باشه؟؟؟؟!!!!!!!!!!!

سعید شاهینی

سلام٬ یه قسمتی داخل اندروید استودیو هست به اسم Android Monitor. پایین صفحه سمت چپ قرار گرفته. داخل اون وقتی تب logcat رو انتخاب کنید٬ می تونید Log رویداد هایی که داخل اپتون اتفاق میوفته رو مشاهده کنید. از اون قسمت ارروری که اتفاق میوفته با رنگ قرمز مشخص هست. اون رو واسم ارسال کنید تا بتونم بهتون راهنمایی کنم.

رضا رمضانزاده

سلام … استاد به ایمیلتون ارسال کردم

سعید شاهینی

این چیزی که واسم ارسال کردید اررور نیست، اخطاره ولی مشکلی ایجاد نمی کنه. برای برطرف کردن اخطار باید مقدار رم شبیه سازتون رو به 1024 تغییر بدید.

وحید شهبازیان replyپاسخ

سلام و تشکر از شما
لطفا در مورد این تفاوت ورژن ها و روش حلش بیشتر توضیح بدید. منم همین مشکل رو دارم یعنی وقتی recycler view رو اضافه می کنم ورژن فرق می کنه و gradle به مشکل می خوره. در ضمن من از آخرین نسخه android studio استفاده می کنم. چطوری sdk رو update کنم؟(sdk manager نیست بخدا)

سعید شاهینی

سلام، sdk manager الان به روز شده ولی از بین نرفته، کافیه داخل setting اندروید استودیو سرچ کنید sdk. داخل sdk manager جدید فقط کافیه گزینه هایی که لازم دارید رو تیک بزنید و بعد روی ok کلیک کنید تا دانلود بشوند.

مهرداد قاسمیان replyپاسخ

با سلام و تشکر
cannot resolve symbol R
این خطا رو تو تمامی فایل های جاوا میده
برای رفعش باید چیکار کرد؟

سعید شاهینی

سلام٬ این ارور چند دلیل می تونه داشته باشه:
۱- خطایی در پیاده سازی لایوت ها داخل xml وجود داشته باشد.
۲- فایل R.java ایمپورت نشده باشد.
۳- یا پروژه Build نشده.

مهرداد قاسمیان replyپاسخ

من دارم با آخرین نسخه آندروید استدیو کار میکنم امروز در حال تماشای این ویدیو بودم به اونجا رسیدم که شما در قسمت Library dependency به پروژه تون com.android.support:recyclerview-v7:23.4.0 رو میخواین اضافه کنید اما برای من چنین library وجود نداره و library زیر وجود داره که چون هم نام بود اون رو به پروژه م اضافه کردم
com.android.support:recyclerview-v7:26.0.0-alpha1
اما بعد از اضافه کردن این library به پروژه با خطای cannot resolve symbol R مواجه شده به طوری که در تمامی فایل های جاوا R ناشناخته هست خطا میده و جالب اینجاست که بعد از حذف com.android.support:recyclerview-v7:26.0.0-alpha1 این مشکل برطرف میشه و R شناخته میشه
ممنون میشم راهنمایی کنید چون خیلی تلاش کردم رفع نشد
با تشکر از استاد گرامی و مدیران محترم 7لرن

سعید شاهینی

سلام، دلیلش اینه که ورژن اون با بقیه dependency های مربوط به support library متفاوته

hamed_z2001 replyپاسخ

با سلام خدمت شما استاد عزیز
من دارم یک اپ پیاده سازی میکنم که چند قسمت لیستی داره ، دقیقا مشابه با playstore …
برای پیاده سازی چند recyclerview در یک صفحه و به صورت افقی به چه صورت باید عمل کرد؟؟

یک سوال دیگه ای که هست ، وقتی از StaggeredGridLayoutManager برای افقی کردن یک recyclerview استفاده میکنم نهایت یک آیتم رو نشون میده ، ولی اگه مثل پلی استور بخام چندتا آیتم رو کنار هم نشون بده باید چیکار کنم ؟

ممنون

سعید شاهینی

سلام، باید از linear layout manager استفاده کنید.

مهرداد قاسمیان replyپاسخ

با سلام واقعا نمی تونیم پیش بریم شاهینی و نسخه جدید آندروید استدیو فرق کرده
من اصلا در نسخه جدید نمی تونم از RecyclerView استفاده کنم
ویدئو رو چند بار دیدم
ممنون میشم راهنمایی بفرمایید

لقمان آوند

با جناب شاهینی تماس گرفتید ؟ شماره تلفنشون در صفحه دوره هست…

nahid matinrad replyپاسخ

i’m hanging 😐 😐 😐

کیوان علی محمدی

سلام هنگ نکنید از مدرس سوال بپرسید تا مشکلتون حل بشه ^_^

Abbas Hosseini Manesh replyپاسخ

با سلام ببخشید استاد تو ورژن جدید اندروید استودیو زمانی که از ellipsize استفاده میکنیم و برابر end قرار میدیم اصلا نمایش داده نمیشه و maxlines رو از 2 به 1 تبدیل میکنه میخواستم ببینم قابل حل هست یا خیر؟

سعید شاهینی

سلام، من همچین مشکلی ندارم! مشکل جای دیگه هست و ربطی به اندروید استودیو نداره.

محمدمهدی کرمی replyپاسخ

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

سعید شاهینی

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

Ali Ghafari replyپاسخ

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

سعید شاهینی

سلام، اگه می خواید راست به چپ باشه، یعنی آیتم اول سمت راست بالا قرار بگیره، این صفت رو به recyclerview داخل xml اضافه کنید:
android:layout_direction="rtl"

امیر غلامی replyپاسخ

استاد یه لیست داره ک وقتی ب انتها میرسه دوباره میره از سرور 10 تا دیگه رو لود میکنه , بعد هرکدوم از آیتمام یه قلب دارن ک کلیک کنن روش قرمز میشه ولی درست کار نمیکنه مثلا روی قلب آیتم اول تاچ میکنم سومی قرمز میشه و همینجور ک اسکرول میکنم پایین تا 10 تا دیگ لود شه بازم سومیشون همه قرمزن , میشه راهنمایی کنید کجا بنویسیم این کلیک لیسنر رو ؟

سعید شاهینی

سلام، دلیل اینکه بقیه قلب ها قرمز می شون اینه که بازیافت شدن. برای جلوگیری از این مشکل باید یک فیلد داخل کلاس آیتم مثلا post ایجاد کنید و اسمشو بگذارید isFavorite که از نوع boolean هستش. بعد داخل متد onBindViewHolder چک کنید که اگه true بود قلب قرمز بشه. اگه false بود خالی شه. بعد داخل OnClickListener بنویسید اگه isFavorite مقدار trueداشت اون رو false کنید در غیر این صورت true. بعد از این شرط بنویسید، notifyItemChange و پوزیشن آیتمی که روش کلیک شده رو بدید.

امیر غلامی

درست شد 🙂

Desert replyپاسخ

سلام .
اول تشکر می کنم بابت اموزش خیلی خوب استاد شاهینی عزیز.
دوم . در اموزش قسمت ده هنگامی که در حال طراحی یک layout برای آیتم های RecyclerView هستیم هنگام طراحی ImageView از scaleType=”centerCrop” استفاده کردیم که فکر می کنم کارش به این صورت است که عکس مورد نظر مارا در وسط قرار می دهد و اگر بیش از مقدار مورد نظر ما بود اطرافش را می برد. منتها در اپلیکیشن های رایج که کاربر به طور مثال می خواهد یک اگهی در اپلیکیشن قرار دهد و عکسی اضافه کند وقتی عکس را از قسمت لایبرری اش انتخاب می کند و به سرور اپلیکیشن مربوطه ارسال می کند و سایر کاربر ها وقتی می خواهند ان عکس را مشاهده کنند ان عکس در بهترین حالت scale شده است یعنی وقتی بنده عکس را اپلود می کنم طول و عرض عکس در بهینه ترین حالت ممکن اسکیل می شوند و اطرافشان بریده نمی شود. (اگر اشتباه می کنم اصلاح بفرمایید.)
استاد عزیز ممنون می شوم راهنمایی بفرمایید که برای سناریو مطرح شده در بالا باید به چه صورت عمل کنیم. ایا باید از fitCenter یا ویژگی دیگری استفاده کنیم و یا بهترین حالت این است که تصویر را کاربر اپلود کند در سرور با استفاده از کتابخانه ای اسکیل شود و بعد که یک کاربر دیگر در ریسایکر ویو می خواهد تصویر را ببیند تصویر بهینه شده را دریافت کند و یا این تغییرات هنگام اپلود اعمال شود و یا ….
عذرخواهی می کنم سوال طولانی شد . سپاس

سعید شاهینی

سلام٬ من فکر می کنم همین CenterCrop هست که بهترین راهه. در مورد مثالی که فرمودید مثلا دیوار هم از CenterCrop استفاده می کنه. چون هیچوقت Ratio عکس رو به هم نمی زنه و در ضمن همیشه کادر ImageView رو کامل پر می کنه

Desert replyپاسخ

سلام و خسته نباشید خدمت استاد شاهینی عزیز.
استاد عزیز بنده یک مشکلی مربوط به مفاهیم که در اوایل اموزش توضیح فرمودید برایم در اموزش قسمت ده به وجود امد ممنون می شم راهنمایی بفرمایید. هنگامی که ما کلاس NewsViewHolder را از RecyclerView.ViewHolder ارث بری می کنیم از ما خواسته می شود که به دلیل این که این کلاس کانستراکتور دیفالت ندارد کانستراکتورش را پیاده سازی کنیم که شما زحمت ان را در اموزش می کشید. سوال بنده این است که اگر بنده در کلاس NewsViewHolder یک کانستراکتور دیفالت بسازم باید این ارور قطع شود یعنی بنده از یک کلاسی که کانستراکتور دیفالت نداشته و کانستراکتور دیگری داشته ارث بری کرده ام اروری گرفته ام . به جای پیاده سازی ان از کلاس والد یک کانستراکتور دیفالت در کلاس فرزند ایجاد کرده ام منتها با ایجاد این کلاس بنده باز هم همان ارور را میگیرم منتها این بار خط قرمز زیر کانستراکتور دیفالتی که در کلاس فرزند ساخته ام کشیده می شود و به بنده می گوید که کانستراکتور دیفالت در کلاس والد وجود ندارد مگر نه این که من می توانم در فرزند متدی اضافه کنم؟
البته می دانم به صورت مستقیم سوال بنده به مباحث قسمت ده مرتبط نیست منتها این سوال مفهومی در این قسمت برای بنده ایجاد شده .ممنون

سعید شاهینی

سلام دلیلش اینه که شما متد super رو در خط اول Constructor فراخونی نکردی.

محمدرضا علیمردانی replyپاسخ

سلام
این کتابخونه compile ‘com.android.support:recyclerview-v7:23.4.0’
برای من نمیاد، با وی پن هم.
ولی بجاش com.android.support:recyclerview-v7:26.0.0-alpha1 رو میاره که با تایید این به ارور زیر برخورد میکنمError:Execution failed for task ‘:app:processDebugManifest’.
> Manifest merger failed : Attribute meta-data#android.support.VERSION@value value=(25.3.1) from [com.android.support:appcompat-v7:25.3.1] AndroidManifest.xml:27:9-31
is also present at [com.android.support:recyclerview-v7:26.0.0-alpha1] AndroidManifest.xml:24:9-38 value=(26.0.0-alpha1).
Suggestion: add ‘tools:replace=”android:value”‘ to element at AndroidManifest.xml:25:5-27:34 to override.
ممنون میشم راهنماییم کنید

سعید شاهینی

سلام٬ ورژن ۲۳.۴.۰ رو به ۲۵.۳.۱ تبدیل کنید و build کنید.

محمدرضا علیمردانی

سپاسگزارم

محمدرضا علیمردانی

با این حالRرو در R.layout نمیشناسه و ران نمیشه

سعید شاهینی

احتمالا دلیل اینکه R.java رو نمی شناسه اینه که یه مشکلی در فایل های xml شما وجود داره. یعنی جایی که داشتید رابط کاربری رو پیاده سازی می کردید اروری وجود داره.

مجتبی علیزاده replyپاسخ

سلام با عرض معذرت؛ من پستای قبل رو نخونده بودم. الان به جوابم رسیدم. با تشکر از زحماتتون

mohammad maghsoudi replyپاسخ

سلام
برنامه ی من اجرا نمیشه و پیغام my application has stopped میده
برنامه هیچ ارورری به من نمیده
اسم اکتیویتی ها به رنگ نارنجی نمایش میده
میشه راهنمایی کنید

سعید شاهینی

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

mohammad maghsoudi

حل شد
مرسی

Amir Ghor replyپاسخ

سلام استاد خوبین استاد چرا تو ساختن یک شی از اداپتر دو تا this استفاده کردید کلا اون چند خط رو میشه توضیح بدین؟؟

سعید شاهینی

سلام٬ واژه ی this اشاره به خود کلاس داره٬ با توجه به مفهوم Polymorphism یا چند ریختی٬ می شه مثلا به جای context خود اکتیویتی رو پاس داد٬ چون کلاس AppCompatActivity از کلاس context ارث بری کرده.

محمد واحدی replyپاسخ

استاد بازم منم سوال دارم 🙂
1- اگه بخوایم اون 2 خط content رو تراز کنیم که یه جای خاص آخر خط باشه و عقب جلو نباشه باید چیکار کنیم؟ ( یه چیزی تو مایه های Justify کردن )
2- اگه بخوایم وقتی کاربر روی متن کلیک می کنه کل متن نمایش داده بشه باید اول توی Adapter اون متن رو بگیریم و بعد متصل کنیم به activity اصلی؟

سعید شاهینی

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

Ali Ghafari replyپاسخ

باسلام و احترام خدمت شما استاد گرامی
برای پیاده سازی کلیک روی آیتم های ریساکلر ویو چه فرایندی رو پیشنهاد میکنید؟
چون اگه هر بار بخواییم واسه یک آیتم که چندین ویو برای کلیک داره و برای هر ویو new onclickListener بسازیم سرعت رو پایین میاره

سعید شاهینی

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

ALIREZA SHARIFI replyپاسخ

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

سعید شاهینی

اپلیکیشن تو حلقه بی نهایت گیر کرده یا out of memory داده، کد خودتون رو بررسی کنید

Ali Ghafari replyپاسخ

باسلام و خسته نباشید
استاد بنده یه لیست تو در تو دارم که وقتی لیست داخلی تموم میشه رو لیست اصلی تاثیر میگذاره ،چجوری میتونم از این موضوع جلوگیری کنم؟(لیست ها RecyclerView هستند)
شرایطی که نیاز دارم
https://i.stack.imgur.com/AUcb9.gif
شرایطی که الآن هست
https://i.stack.imgur.com/LiXXe.gif

باسپاس فراوان

سعید شاهینی

recyclerView.setNestedScrollingEnabled(false)

سحر آزاد replyپاسخ

سلام. خیلی ممنون بابت آموزش خوبتون و به خصوص صدای رسا در زمان ضبط ویدئو

من کد رو که اجرا می کنم تصویر رو نشون نمیده و فقط متن ها به نمایش درمیان. بالطبع وقتی tools رو هم در layout به android تغییر میدم فقط همان عکس اول برای تمام اخبار نمایش داده می شه. نمی تونم اشکالش رو پیدا کنم و ممنون می شم راهنمایی بفرمایید.

سعید شاهینی

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

saghar saberi replyپاسخ

سلام.
من وقتی میخوام کتابخانه recyclerview اضافه کنم error زیر رو میده. از vpn هم استفاده میکنم.ممنون میشم بگید چطور حلش کنم.ایمیل هم فرستادم واستون و اسکرین گرفتم
Failed to resolve: recyclerview-v7
Open File

سعید شاهینی

سلام، vpn ای که استفاده می کنید باید سیسکو باشه فقط اونه که کار می کنه در حال حاضر.

فردین عباسی replyپاسخ

سلام استاد
در کد پایین وقتی context رو با c کوچیک میزنم error میده (کل کلمه context قرمز میشه) وقتی c رو با حرف بزرگ مینویسم زیر کلمه getResources() قرمز میشه
در صورتی که در ویدئو شما c در context با حرف کوچیک هست نه context ونه getResources ارور میدن

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

switch (i){
                case 1:
                    postModel.setPostImage(ResourcesCompat.getDrawable(context.getResources(),R.drawable.pic1,null));
                    break;
            }
سعید شاهینی

سلام دلیلش این هست که نمی تونه آبجکت context رو پیدا کنه، آیا متغیر context رو اصلا تعریف کردید؟

فردین عباسی

سلام استاد
ممنون حواسم نبود context رو تعریف نکرده بودم

حسین غلامی replyپاسخ

سلام استاد
من بعد از اضافه کردن کتابخانه ریسایکلر ویو دیگه برنامه ران نمیشه و همچین اخطاری میده .
Error:Execution failed for task ‘:app:processDebugManifest’.
> Manifest merger failed : Attribute meta-data#android.support.VERSION@value value=(25.3.1) from [com.android.support:appcompat-v7:25.3.1] AndroidManifest.xml:27:9-31
is also present at [com.android.support:recyclerview-v7:26.0.0-alpha1] AndroidManifest.xml:24:9-38 value=(26.0.0-alpha1).
Suggestion: add ‘tools:replace=”android:value”‘ to element at AndroidManifest.xml:25:5-27:34 to override.
با تشکر

سعید شاهینی

سلام ورژن recyclerView که اضافه شده برای شما: 26.0.0.-alpha1 هست که باید به جای اون از 27.1.1 استفاده کنید

fatemeh105

این مشکل چه طوری حل کردید

علی خاکساری replyپاسخ

سلام استاد خسته نباشید
من میخواستم یه دکمه ای طراحی کنم برای RecyclerView که با استفاده از اون حالت چیدمان لیست از LinearLayout به GridView تغیر کنه شبه همون چیزی که در دیجی کالا هست
چیز خاصی در موردش توی نت پیدا نکردم
میشه لطفا راهنمایی کنید چجوری باید درستش کنم یا اگه مقاله ای هست معرفی کنید
خیلی ممنونم

علی خاکساری replyپاسخ

سلام استاد خواهش میکنم جواب من رو بدید
اگر هم سوالم مبتدی هست ولی خیلی کارم گیره باید این رو درست کنم توی برنامه ام واقعا ممنونم میشم من ایمیل هم دوبار زدم جواب ندادید
اگه امکانش باشه تماس بگیرم
من میخواستم یه دکمه ای طراحی کنم برای RecyclerView که با استفاده از اون حالت چیدمان لیست از LinearLayout به GridView تغیر کنه شبه همون چیزی که در دیجی کالا هست
چیز خاصی در موردش توی نت پیدا نکردم
میشه لطفا راهنمایی کنید چجوری باید درستش کنم یا اگه مقاله ای هست معرفی کنید
خیلی ممنونم

محمدرضا replyپاسخ

با سلام خدمت آقای شاهینی
شما در این جلسه از adapter استفاده کردید اگه میتونید تفاوت انواع adapter رو بگید
برای مثال array adapter با base adapter و یا با list adapter چه فرقی داره و هر کدوم در کجاها کاربرد دارند؟

fatemeh105 replyپاسخ

سلام استاد
من بعد از اضافه کردن کتابخانه ریسایکلر ویو دیگه برنامه ران نمیشه و همچین اخطاری میده .باید چیکار کنم در جواب یکی از دوستان پاسخ دادین ولی خوی چه طور باید 27.1.1رو اضاف کرد؟؟؟؟
Error:Execution failed for task ‘:app:processDebugManifest’.
> Manifest merger failed : Attribute meta-data#android.support.VERSION@value value=(25.3.1) from [com.android.support:appcompat-v7:25.3.1] AndroidManifest.xml:27:9-31
is also present at [com.android.support:recyclerview-v7:26.0.0-alpha1] AndroidManifest.xml:24:9-38 value=(26.0.0-alpha1).
Suggestion: add ‘tools:replace=”android:value”‘ to element at AndroidManifest.xml:25:5-27:34 to override.
با تشکر

fatemeh105 replyپاسخ

سلام استاد
من بعد از اضافه کردن کتابخانه ریسایکلر ویو دیگه برنامه ران نمیشه و همچین اخطاری میده .باید چیکار کنم در جواب یکی از دوستان پاسخ دادین ولی خوب چه طور باید 27.1.1رو اضاف کرد؟؟؟؟
Error:Execution failed for task ‘:app:processDebugManifest’.
> Manifest merger failed : Attribute meta-data#android.support.VERSION@value value=(25.3.1) from [com.android.support:appcompat-v7:25.3.1] AndroidManifest.xml:27:9-31
is also present at [com.android.support:recyclerview-v7:26.0.0-alpha1] AndroidManifest.xml:24:9-38 value=(26.0.0-alpha1).
Suggestion: add ‘tools:replace=”android:value”‘ to element at AndroidManifest.xml:25:5-27:34 to override.

Realali 13771377 replyپاسخ

سلام و خسته نباشید میشه بفرمایید این کدها در ریسایکلر ویو دقیقا کارشون چیه؟ (کلاس newAdapter و متد onBindViewHolder)
منظورم اینه چه ساختاریه

holder.image.setText(post.getTitle());
Realali 13771377 replyپاسخ

یه سوال دیگه هم دارم استاد
ببخشید سوالام مبتدی هست
این itemView دقیقا کارش اینجا چیه؟
(در کلاس newViewHolder )

ImageView iv=(ImageView) itemView.findViewById(R.id.iv);
سعید شاهینی

سلام، وقت بخیر، itemview همون view ای هست که داخل onCreateViewHolder اون رو تعریف کردیم، چون ImageView آیتم ما داخل اون itemView هست باید روی اون متد findviewbyid صدا زده بشه

Realali 13771377 replyپاسخ

سلام و خسته نباشید
استاد اگه در کلاس Datamodel متغیرها را رو پابلیک تعریف کنیم در کلاس DataFakeGenerator چجوری باید مقداردهیشون کنیم؟
پیشاپیش ممنون

ارسال نظرات

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