Notice: Constant DISALLOW_FILE_EDIT already defined in /home/nouriin/public_html/wp-config.php on line 107
کتابخونه ساختن ریسایکلرویو پیشرفته با Bouncy RecyclerView | محمد نوری

کتابخونه ساختن ریسایکلرویو پیشرفته با Bouncy RecyclerView

کتابخونه ساختن ریسایکلرویو پیشرفته با Bouncy RecyclerView
کتابخانه

کتابخونه ساختن ریسایکلرویو پیشرفته با Bouncy RecyclerView

Bouncy recyclerview بهت کمک می‌کنه تا یه ریسایکلرویو خیلی پیشرفته‌ای درست کنی.

اکثر اپلیکیشن‌های اندرویدی که درست می‌کنیم ممکنه که RecyclerView داشته باشه.

پس چه بهتر که به این RecyclerView امکاناتی رو اضافه کنیم که هم برای کاربران جذاب‌تر باشه، هم اینکه برنامه ما رو حرفه‌ای تر جلوه بده.

چرا باید از Bouncy استفاده کنم ؟

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

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

امکانات این کتابخونه

  • اضافه کردن حالت فنری به RecyclerView (فنری بودن)
  • اضافه کردن حالت Drag & Drop آیتم‌ها (کشیدن و رها کردن)
  • اضافه کردن حالت Swipe آیتم‌ها (کشیدن به چپ و راست)

این‌ها امکاناتی هستش که به جذابیت RecyclerVIew شما کمک می‌کنه.

اضافه کردن به پروژه

برای اینکه از این کتابخونه استفاده کنی باید کد زیر رو به build.gradle اضافه کنی

implementation 'com.factor:bouncy:1.8'

بعد از اضافه کردن کد بالا پروژه رو sync کن.

خب بعد از اینکه پروژه با موفقیت sync شد، دیگه می‌تونی ازش استفاده کنی.

آموزش استفاده از این کتابخونه

برای اینکه از این کتابخونه استفاده کنی، باید کد زیر رو به فایل XML اضافه کنی.

برای اینکار می‌تونی از کد زیر استفاده کنی

<com.factor.bouncy.BouncyRecyclerView
    android:id="@+id/bounceList_recyclerView"
    android:layout_width="match_parent"
    android:layout_height="0dp"
    app:allow_drag_reorder="true"
    app:allow_item_swipe="true"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintLeft_toLeftOf="parent"
    app:layout_constraintRight_toRightOf="parent"
    app:layout_constraintTop_toBottomOf="@+id/bounceList_toolbar"
    app:recyclerview_damping_ratio="DAMPING_RATIO_LOW_BOUNCY"
    app:recyclerview_fling_animation_size=".7"
    app:recyclerview_overscroll_animation_size=".7"
    app:recyclerview_stiffness="STIFFNESS_MEDIUM" />

با کد بالا ما view مربوط به این ریسایکلرویو رو به پروژه اضافه کردیم.

بعد از این مرحله باید کدهای مربوط به Adapter رو بنویسیم.

کدهای Adapter

برای استفاده از این کتابخونه بجای اینکه adapter شما از RecyclerView.Adapter ارث بری کنه، باید از BouncyRecyclerView.Adapter ارث بری کنه.

بعد از اینکه از BouncyRecyclerView.Adapter ارث بری کردی، چندتا متد جدید به adapter اضافه میشه.

کد زیر، کد کامل adapter هستش

class BounceAdapter constructor(private val model: MutableList<TitleModel>) : BouncyRecyclerView.Adapter<BounceAdapter.MyViewHolder>() {

    private lateinit var context: Context

    override fun getItemCount(): Int {
        return model.size
    }

    override fun onBindViewHolder(holder: MyViewHolder, position: Int) {
        holder.bindData(model[position])
    }

    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): MyViewHolder {
        context = parent.context
        return MyViewHolder(LayoutInflater.from(context).inflate(R.layout.item_bounce_list, parent, false))
    }

    override fun onItemMoved(fromPosition: Int, toPosition: Int) {
        Collections.swap(model, fromPosition, toPosition)
        notifyItemMoved(fromPosition, toPosition)
    }

    override fun onItemReleased(viewHolder: RecyclerView.ViewHolder) {
        viewHolder.itemView.alpha = 1f
    }

    override fun onItemSelected(viewHolder: RecyclerView.ViewHolder?) {
        viewHolder?.itemView?.alpha = 0.5f
    }

    override fun onItemSwipedToEnd(viewHolder: RecyclerView.ViewHolder, positionOfItem: Int) {

    }

    override fun onItemSwipedToStart(viewHolder: RecyclerView.ViewHolder, positionOfItem: Int) {
        viewHolder.itemView.findViewById<ImageView>(R.id.itemBounce_delete).visibility = View.VISIBLE
        viewHolder.itemView.findViewById<ImageView>(R.id.itemBounce_delete).setOnClickListener {
            removeAt(positionOfItem)
        }
        notifyItemChanged(positionOfItem)
    }

    private fun removeAt(position: Int) {
        model.removeAt(position)
        notifyItemRemoved(position)
        notifyItemRangeChanged(position, model.size)
    }

    class MyViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
        private val title = itemView.findViewById(R.id.itemBounce_title) as TextView

        fun bindData(data: TitleModel) {
            title.text = data.title
        }
    }
}

توی کد بالا به صورت کامل کدهای adapter رو قرار دادم و حالا میخوام متدهای جدیدی که اضافه شدن رو توضیح بدم.

توضیحات متدهای جدید

همانطور که گفتم بعد از اینکه از bouncy استفاده می‌کنی یکسری متدهای جدید به adapter اضافه میشه.

بریم که این متدها رو هم توضیح بدم.

override fun onItemMoved(fromPosition: Int, toPosition: Int) {

}

برای حالت Drag & Drop یا جابجایی آیتم‌ها استفاده میشه

override fun onItemSelected(viewHolder: RecyclerView.ViewHolder?) {

}

موقع گرفتن و کشیدن آیتم‌ها این متد فراخوانی میشه.

override fun onItemReleased(viewHolder: RecyclerView.ViewHolder) {

}

موقع رها کردن آیتم‌ها این متد فراخوانی میشه.

override fun onItemSwipedToEnd(viewHolder: RecyclerView.ViewHolder, positionOfItem: Int) {

}

موقعی که آیتم‌ها رو به راست میکشی این متد صدا زده میشه.

override fun onItemSwipedToStart(viewHolder: RecyclerView.ViewHolder, positionOfItem: Int) {

}

موقعی که آیتم‌ها رو به چپ میکشی این متد صدا زده میشه.

خب حالا که کدهای مربوط به adapter رو متوجه شدی بهتره بریم که ازش توی activity/fragment استفاده کنیم.

استفاده از کتابخونه در Activity/Fragment

با کد زیر میتونی adapter که بالا ساختی رو به bouncy recyclerview اعمال کنی

bounceAdapter = BounceAdapter(titleList)
bounceList_recyclerView.adapter = bounceAdapter
bounceList_recyclerView.layoutManager = LinearLayoutManager(this)

توی این پست سعی کردم این کتابخونه رو تا جای ممکن توضیح بدم.

ولی اگه به طور کامل با تک تک این بخش‌ها میخوای آشنا بشی حتما توصیه میکنم ویدیو زیر رو ببینی.

توی این ویدیو به طور کامل و با جزئیات زیاد این کتابخونه رو آموزش دادم

نمایش آموزش ویدیوای کار با کتابخونه

دیدگاه خود را اینجا قرار دهید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

فیلدهای نمایش داده شده را انتخاب کنید. دیگران مخفی خواهند شد. برای تنظیم مجدد سفارش ، بکشید و رها کنید.
  • عکس
  • شناسه محصول
  • امتیاز
  • قیمت
  • در انبار
  • موجودی
  • افزودن به سبد خرید
  • توضیحات
  • محتوا
  • عرض
  • اندازه
  • تنظیمات بیشتر
  • ویژگی ها
  • Custom attributes
  • زمینه های دلخواه
مقایسه
لیست علاقه مندی ها 0