<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
    <channel>
        <title>نوشته های Mohamad Mohamadi</title>
        <link>https://virgool.io/feed/@mohamad171</link>
        <description>Android and Python (Django) developer | Github: github.com/mohamad171 | Website: http://m-mohamadi.ir</description>
        <language>fa</language>
        <pubDate>2026-06-07 12:32:50</pubDate>
        <image>
            <url>https://files.virgool.io/upload/users/24805/avatar/EFXSKX.png?height=120&amp;width=120</url>
            <title>Mohamad Mohamadi</title>
            <link>https://virgool.io/@mohamad171</link>
        </image>

                    <item>
                <title>تجربیات یک فریلنسر :)</title>
                <link>https://virgool.io/Freeland/%D8%AA%D8%AC%D8%B1%D8%A8%DB%8C%D8%A7%D8%AA-%DB%8C%DA%A9-%D9%81%D8%B1%DB%8C%D9%84%D9%86%D8%B3%D8%B1-xjnt4wumimtu</link>
                <description>فریلنسرسلام من محمدم، برنامه نویس اندروید و پایتونمیخوام یکم از تجربه فریلسنر بودنم واستون بگم البته من تازه وارد این حوزه شدم ولی خب خیلی جالب بود و به اکثر دوستامم توصیه کردم.والا بخوام شروع کنم من سال ۹۴ توی یک شرکتی شروع به کار کردم و حالا اونجا به اسم کارآموز واسشون برنامه مینوشتم از اونجاییم که درجریان کارآموزی هستید پولی بابت کار نمیگیری...بعد که این موضوع گذشت با معرفی یکی از اساتید رفتم یک شرکت بازی سازی که اونجا دو سالی کار میکردم که واقعا شرکت خوبی بود هم بچه های فنی و هم محیط خوبی بود که اونجا خیلی پیشرفت کردمبعدش شرکت های دیگه رو بخاطر تجربه رفتم که هرجا مشکلات خاصی داشت ...مثلا یه جا حقوقش کم بود ، یه جا مرخصی نداشت یا یه جا روزای تعطیلم باید میرفتم سر کار ...اینا خیلی بهم فشار آورد و گفتم که جایی سر کار نمیرم تو خونه میشینم و پروژه میگیرم رفتم توی سایت پونیشا و نصف سرمایم که میشد 25 هزار تومن رو دادم تا اکانتمو برنزی کردم و شروع کردم برای درخواست پروژه ها درخواست ثبت کردن که بعد از حدود 5 تا ارسال درخواست یکیشون انتخاب کردن و دیگه منم استارت کارمو زدم.حالا جالبی این کار اینه که پول و دستمزد کارت رو خودت مشخص میکنی پس نمیتونی بعدا شاکی بشی که کمه و فلان چون خودت پیشنهاد دادی یه موردی که خیلی خوشم اومد ازش آزاد بودن تایم کاریته یعنی من اگر توی شرکتی بودم باید ۸ صبح بیدار میشدم تا ۴ بعد از ظهر کار میکردم و ... ولی وقتی فریلنسر باشم مثلا ساعت ۹ بیدار میشم تا ۱۲ کار میکنم و بعد میخوابم دوباره ۵ کار میکنم تا ۱۰ شب پس ساعت کاری منعطفهمرخصی که اینم دست خودتونه میتونید هروقت خواستید کار کنید و هروقتم نخواستید کار نکنید.نمیخوام زیاد طولانی بشه فقط چندتا نکته از تجربیاتم بگم و تموم کنم این پست روسعی کنید حتما پروفایلتون رو کامل کنید یعنی اطلاعات و توضیحاتی در مورد خودتون بزارید و حتما نمونه کار بزارید چون کارفرماها اول میرن نمونه کاراتونو میبینن- اولیش این که پیشنهادی که میدید برای پروژه منطقی و معقول باشه نه خیلی کم نه خیلی زیاد- دومیش این که مدت زمان پروژه رو حتما برنامه ریزی شده ثبت کنید چون به مشکل میخورید اگر برنامه ریزی مناسبی نداشته باشیدسومی و البته آخری هم این که حتما حتما دردسترس کارفرما باشید یعنی توی تایم کاری مثلا تا ۹ شب حداقل در دسترس باشید که خیلی تاثیر داره و باعث میشه پروژه های جدید تری بگیرید.تقریبا تموم شده و مورد خاصی هم نمونده که بگم ولی تجربه خوبیه حتما سعی کنید تست کنید تا از کار کردن لذت ببرید و از شر سیستم های خشک اداری و شرکتا راحت بشید :) ... </description>
                <category>Mohamad Mohamadi</category>
                <author>Mohamad Mohamadi</author>
                <pubDate>Wed, 24 Jul 2019 22:47:04 +0430</pubDate>
            </item>
                    <item>
                <title>آشنایی و پیاده سازی RecyclerView در اندروید</title>
                <link>https://virgool.io/@mohamad171/%D8%A2%D8%B4%D9%86%D8%A7%DB%8C%DB%8C-%D9%88-%D9%BE%DB%8C%D8%A7%D8%AF%D9%87-%D8%B3%D8%A7%D8%B2%DB%8C-recyclerview-%D8%AF%D8%B1-%D8%A7%D9%86%D8%AF%D8%B1%D9%88%DB%8C%D8%AF-wnkj8yzzhfgd</link>
                <description>سلامنیاز دیدم توی این پست شما رو با RecyclerView در اندروید آشنا کنم و یاد بدم که چطوری میشه اونو پیاده سازی کرد.یکم کدهایی که داره زیاده ولی ارزشش رو دار :)اول از همه باید ببینیم این ریسایکلر ویو چیه!اول معنی لغوی RecyclerView رو بخوام بگم ، فقط همین کافیه که معنی Recycle رو بدونید که یعنی بازیافت.حالا بریم سراغ اصل ماجرا...خدمتتون عرض کنم که این ریسایکلر ویو شبیه همون لیست ویو که یک فرق کوچیک داره ، همون باعث برتریش نسبت به لیست ویو ، اون فرق کوچیکم اینه که توی لیست ویو به ازای تعداد آیتم های لیستی که دارید از اون View واستون یکی میسازه و در اکتیویتی نشون میده ولی ریسایکلر ویو این کارو نمیکنه فقط به تعدادی که توی صفحه نمایش میده از اون view میسازه و وقتی شما مثلا اسکرول میکنید که آیتم پایینی رو ببینید ، یک آیتم بالا میره دیگه ( از چشم شما پنهون میشه :) ) همون رو میاره پایین!!! سرعتش اینقدر که بالاس شما متوجه نمیشید...توی این عکس کامل معماری ریسایکلر ویو رو متوجه میشید.ریسایکلر ویودیدید چقد جالبه!خب حالا توضیح تئوری بسه بریم مراحل کار رو یک توضیح کوچیک بدیم و بعدش دیگه سراغ کدنویسی...کارهایی که لازمه انجام بدیم تا بتونیم از ریسایکلر ویو استفاده کنیم:1- اضافه کردن کتابخونه RecyclerView به gradle2- اضافه کردن RecyclerView به لایوت اکتیویتی3- ساخت Model4- ساخت Adapter5- مرحله نهایی هم اضافه کردن دیتا به ریسایکلر ویو...1 - اضافه کردن کتابخونه RecyclerView به gradleبرای این که ریسایکلر ویو رو بخوایم استفاده کنیم باید به پروژه اضافه کنیم برای این کار فایل gradle مربوط به ماژول app رو باز کنید و قطعه کد زیر رو بهش اضافه کنید: implementation &#039;com.android.support:recyclerview-v7:27.1.1&#039;فقط حواستون باشه که 27.1.1 روبا توجه به appcompact باید تغییر بدید وگرنه زیرش یه خط قرمز میندازهو شما فکر میکنید چه خبر شده.( یعنی مثلا اگه ورژن appcompact شما هست 28.0.0 باید ریسایکلر ویو هم ورژنش رو بزارید 28.0.0)خب بعد از این کار گزینه sync رو که بالای صفحه سمت راست آبی رنگ هستش رو بزنید.2- اضافه کردن RecyclerView به لایوت اکتیویتیکار Build پروژه که تموم شد باید ریسایکلر ویو رو به لایوت اکتیویتی اضافه کنید. به این صورت:&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;
&lt;RelativeLayout
    xmlns:android=&quot;http://schemas.android.com/apk/res/android&quot;
    android:layout_width=&quot;match_parent&quot;
    android:layout_height=&quot;match_parent&quot;&gt;

    &lt;android.support.v7.widget.RecyclerView
        android:id=&quot;@+id/recycler_view&quot;
        android:layout_width=&quot;match_parent&quot;
        android:layout_height=&quot;match_parent&quot;/&gt;

&lt;/RelativeLayout&gt;خروجی کد XMLخب اینم از این حالا میریم وارد مرحله سوم بشیم...برای این که بخواییم یک مدل بسازیم باید اول یک کلاس جاوا بسازیم ، برای این کار اینجایی که عکسش رو گذاشتم کلیک راست کنید ، گزینه New رو بزنید و بعدش Java Class رو انتخاب کنید ، بعد از این کار پنجره ای مثل پنجره پایین نشون داده میشه:تصویر ساخت کلاسخب بعد از این کار باید متغییر هایی که برای یک آیتم نیاز دارید رو بنویسید و بعد از اون یک متد سازنده (Constructor) و Getter and Setter برای درج اطلاعات بسازید.برای مثال:تصویر Modelبعد از ساخت Model نوبت به ساخت Adapter میرسه...ساخت Adapter کمی پیچیده است شما باید ابتدا کلاسی بسازید که از RecyclerView.Adapter ارث بری میکند.بعد داخل اون کلاس دوباره کلاسی بسازید که از RecyclerView.ViewHolder ارث بری میکند.فقط چندتا نکته برای کلاس ViweHolder شما نیازه که متد سازنده بسازید که وقتی کلاستون رو ساختید یک خط قرمز زیرش براتون میزاره روی اون کلیک کنید بعدش کلید های Alt + Enter رو که بزنید واستون متد رو میسازه.برای کلاس Adapter هم وقتی که که ارث بری میکنید از شما یک ViewHolder میخواد که شما میتونید همین ViewHolder که ساختید رو به عنوان ورودی بهش بدید. بعد از این که دادید خط قرمزی میکشه که بازم با زدن کلید های Alt + Enter و انتخاب گزینه Implement methods واستون یه سری متد هایی میسازه که باید Override بشنخب این متد ها چی هستن؟؟اولین متد:@Overridepublic ProductViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {    return null;}هستش که شما باید داخلش اون لایه ای که قراره نمایش داده بشه ( لایه آیتم ) رو معرفی کنید.که به این صورته:@Overridepublic ProductViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {    View view = LayoutInflater.from(context).inflate(R.layout.products_layout,parent,false);    return new ProductViewHolder(view);}این ProductViewHolder هم همون Viewholder که ساخته بودید کلاسش رو...متد دوم:@Overridepublic void onBindViewHolder(ProductViewHolder holder, int position) {}هستش که شما باید در این متد ابزارایی که توی صفحه گذاشتید رو مقدار دهی کنید یعنی مثلا بگید عنوان این آگهی فلانه یا توضیحاته آگهی فلان...@Overridepublic void onBindViewHolder(ProductViewHolder holder, int position) {    ProductsModel model = productsModels.get(position);    holder.product_title.setText(model.getProductTitle());    holder.product_price.setText(model.getProductPrice());    Picasso.get().load(model.getImageUrl()).into(holder.product_image);}این مدلی میشه...و متد سومی:@Overridepublic int getItemCount() {    return 0;}که کار این متد اینه که بگه چندتا از اون آیتم میخوای واست بسازم؟؟؟ما میگیم به تعداد لیستمون یعنی به تعداد محصول یا آیتم هایی که توی لیستمون هست@Overridepublic int getItemCount() {    return productsModels.size();}به این صورت و این از Adapterتصویر کامل از Adapterحالا شما باید برید توی فایل جاوای اکتیویتی و recyclerview رو اونجا تعریف کنید ، یک نمونه از Adapter بسازید و طبق Constractur که داخل Adapter هست اون رو مقدار دهی کنید ، LayoutManager اون ریسایکلر ویو رو مشخص کنید یعنی اگر میخواهید که حالت Linear داشته باشه از Linea استفاده کنید و اگر میخواهید که حالت Grid داشته باشه از GridLayout استفاده کنید.تصویر کامل کدها:در بالای onCreate:بالای OnCreateدر داخل onCreate:داخل onCreateاین مثال برای حالت GridLayout بود اگر برای LinearLayout خواستید به این صورت تغیید بدید:داخل onCreate خب اینم از اتمامش اگر ناقص بود ببخشید.سوالی هم بود توی نظرات بپرسید حتما جواب میدم.</description>
                <category>Mohamad Mohamadi</category>
                <author>Mohamad Mohamadi</author>
                <pubDate>Wed, 13 Feb 2019 10:19:43 +0330</pubDate>
            </item>
            </channel>
</rss>