<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
    <channel>
        <title>نوشته های shahab yousefi</title>
        <link>https://virgool.io/feed/@codegames</link>
        <description></description>
        <language>fa</language>
        <pubDate>2026-06-16 11:01:15</pubDate>
        <image>
            <url>https://files.virgool.io/upload/users/253604/avatar/avatar.png?height=120&amp;width=120</url>
            <title>shahab yousefi</title>
            <link>https://virgool.io/@codegames</link>
        </image>

                    <item>
                <title>جهنم آداپتور های RecyclerView در اندروید</title>
                <link>https://virgool.io/@codegames/%D8%AC%D9%87%D9%86%D9%85-%D8%A2%D8%AF%D8%A7%D9%BE%D8%AA%D9%88%D8%B1-%D9%87%D8%A7%DB%8C-recyclerview-%D8%AF%D8%B1-%D8%A7%D9%86%D8%AF%D8%B1%D9%88%DB%8C%D8%AF-inppvyngl7zc</link>
                <description>چند سالی میشه که برنامه نویسی اندروید رو شروع کردم. یکی از چیز هایی که توی هر برنامه اندرویدی وجود داره، لیست ها هستند. اون اوایل برای نمایش لیست ها باید از ListView و GridView استفاده میکردیم. بعدش گوگل با support library یه روش جدید رو معرفی کرد که استفاده از RecyclerView ها بود. اما چیزی که تو هر دوی این روش ها تغییر نکرد استفاده از اداپتور ها بود. من از همون اول با استفاده کردن از اداپتور ها مشکل داشتم و هرچی که گذشت و بیشتر توی برنامه نویسی اندروید غرق شدم. بیشتر به فکر یک روش دیگه برای نمایش لیست هام بودم.هر بار برای نمایش یک لیست باید یک کلاس جدید میساختم. توش اداپتور RecyclerView رو پیاده سازی میکردم و کلی کد boilerplate رو که دیگه برای نوشتنشون به ذره ای فکر کردن نیاز نداشتم رو مینوشتم. این کار توی هر پروژه که میگذشت بیشتر اعصابم رو خورد میکرد.این شد که یک کتابخونه نوشتم برای نمایش لیست ها که دیگه لازم نیست یک کلاس دیگه ساخته بشه و کلی از چیز هایی که برای یک لیست میخواستم رو توش قرار دادم. این کتابخونه با کاتلین dsl نوشته شده و کار من رو خیلی راحت تر کرده. https://github.com/shahab-yousefi/simple-list Example 1 - vertical listrecyclerView.simple(items) { // call this function on your recycle view and put your dataset
    columns = 1 // a list with one column and many rows
    
    itemMargin(8) // margin for every items (dp)
    padding(8) // padding of recyclerView (dp)
    clipToPadding = false
    
    // set a header on top of list view that will scroll with other items
    headerBind(R.layout.header_view) {
        // bind header view with dataset
        // will run iside onBindViewHolder of header
    }

    // set a item layout and bind your dataset with it
    itemHolder(R.layout.item_view_v) {
        // will run inside item viewholder
        itemView.button.setOnClickListener {
            // on click
        }

        bind { view, item, position -&gt;
            // bind item view with dataset
            // will run inside onBindViewHolder of item
        }
    }

    // set a footer at bottom of list view that will scroll with other items
    footerBind(R.layout.footer_view) { v -&gt;
        // bind footer view with dataset
        // will run iside onBindViewHolder of footer
    }
}Example 2 - horizontal listrecyclerView.simple(items) {
    rows = 1 // a list with one row and many columns
    
    itemMargin(8)
    padding(8)
    clipToPadding = false
    
    itemHolder(R.layout.item_view_g) {
        itemView.updateLayoutParams {
            width = 170 * density
        }

        itemView.setOnClickListener {
            // on click
        }

        bind { v, item, _ -&gt;
            // bind item view
        }
    }
}Example 3 - vertical/horizontal gridrecyclerView.simple(items) {
    columns = 2 // a grid with 2 columns and many rows
    // or
    rows = 2 // a grid with 2 rows and many columns
    
    itemMargin(8)
    padding(8)
    clipToPadding = false
    
    headerBind(R.layout.header_view) {
        // bind header view
    }

    itemHolder(R.layout.item_view_g) {
        bind { v, item, _ -&gt;
            // bind item view
        }
    }

}Example 4 - view pagerrecyclerView.simple(items) {
    rows = 1
    enablePagerSnap = true // list will act like a view pager
        
    itemBind(R.layout.item_view_p) { v, item, _ -&gt;
        // bind item view
    }
}Example 5 - swipe menurecyclerView.simple(items) {
    columns = 1
    
    itemMargin(8)
    padding(8)
    clipToPadding = false
    clipChildren = false

    itemHolder(R.layout.item_view_h, R.layout.menu_view_h) { // first input is item layout and second one is swipe menu layout

        bind { v, item, _ -&gt;
            // bind item view
        }

        swipeView?.also { v -&gt;
            v.btnDelete.setOnClickListener {
                adapter.removeItem(adapterPosition)
            }
            v.btnMessage.setOnClickListener {
                // on click
            }
        }

    }
}</description>
                <category>shahab yousefi</category>
                <author>shahab yousefi</author>
                <pubDate>Tue, 02 Feb 2021 06:04:13 +0330</pubDate>
            </item>
                    <item>
                <title>نمایش ویدیو آپارات در اندروید</title>
                <link>https://virgool.io/@codegames/%D9%86%D9%85%D8%A7%DB%8C%D8%B4-%D9%88%DB%8C%D8%AF%DB%8C%D9%88-%D8%A2%D9%BE%D8%A7%D8%B1%D8%A7%D8%AA-%D8%AF%D8%B1-%D8%A7%D9%86%D8%AF%D8%B1%D9%88%DB%8C%D8%AF-igfprfnbcqkd</link>
                <description>سلام.یه بار داشتم رو یه اپ اندروید کار میکردم که تو یه صفحه‌ای می‌خواسم ویدیوی از آپارات رو نمایش بدم. رفتم سایت آپارات که ببینم خودش چیزی برای این کار داره یا نه. چیزی پیدا نکردم.تنها راهی که بود یا باید لینک دانلود ویدیو را میگرفتم و نمایش میدادم که این روش رو آپارات قبول نداره و درست نیست و اینکه فک نکنم تعداد بازدید ویدیو بالا بره با این روش. یا باید از iframe آپارات استفاده میکردم. که توی هر ویدیو تو قسمت اشتراک گذاری میشه کدش رو گرفت.کد iframe ویدیواین روش برای سایت چیز خوبیه ولی تو اندروید باید میزاشتمش تو یه WebView بعد برای حالت تمام صفحه هم مشکلاتی وجود داشت. گفتم گوگل رو بگردم شاید یکی یه کتابخونه زده باشه برای  این کار مثل iframe یوتیوب که چند تا کتابخونه براش زدن. ولی چیزی تو گوگل پیدا نکردم.گفتم حالا که دارم این کارو میکنم یه کتابخونه براش بزنم که تو پروژه های دیگه هم بتونم ازش استفاده کنم. https://github.com/shahab-yousefi/aparat-view نحوه نصبallprojects {
    repositories {
        maven { url &#039;https://jitpack.io&#039; }
    }
}dependencies {
    implementation &#039;com.github.codegamez:aparat-view:0.0.6&#039;
}نحوه استفادهکل کتابخونه یه کامپوننت AparatView که آیدی ویدیو آپارات رو بهش میدی و نمایش میده.اگه رو دکمه تمام صفحه هم کلیک کنه یه دیالوگ باز میشه و ویدیو رو به صورت تمام صفحه نمایش میده.آیدی ویدیو های آپارات هم تو لینک صفحه ویدئو هستش.&lt;com.codegames.aparatview.AparatView
        android:layout_width=&amp;quotmatch_content&amp;quot
        android:layout_height=&amp;quotwrap_content&amp;quot
        app:aparatview_video_id=&amp;quotn1Sht&amp;quot
        app:aparatview_video_ratio=&amp;quot16:9&amp;quot /&gt;ممنون که این مطلب رو خوندین. امیدوارم که بتونه بهتون کمک کنه.موفق باشید!</description>
                <category>shahab yousefi</category>
                <author>shahab yousefi</author>
                <pubDate>Sun, 20 Dec 2020 17:52:27 +0330</pubDate>
            </item>
            </channel>
</rss>