۱۸ آذر ۹۶ ، ۰۱:۱۷
سجاد یوسف نیا ۰ نظر Share

مدیریت کردن کلیک ها با استفاده از RXJava 2

 بنابراین تصمیم به نوشتن این مقاله گرفتم که چجوری می تونید eventهای کلیک Recyclerview رو لیسن کنید. 
خب دوستان برای تعامل بین ویو و اداپتر ریسایکلرویو من از Subject ها ی RXJava استفاده کردم، قبلا هم در مورد Subject ها با مثالهای خوبی توضیح دادم برای دیدن توضیحات در مورد Subjectها میتونین به این لینک مراجعه کنین.
همونطور که دیدین یک Subject هم به عنوان یک Subscriber و هم به عنوان یک Observable کار می کنه. بنابراین کاری که ما توی اداپترمون انجام میدیم اینه که از Subject به عنوان یک Observable استفاده می کنیم و توی ویومون با استفاده از همین Subject کار Subscribe رو انجام میدیم، پس یعنی اینکه توی ویومون به عنوان یک Subscriber کار میکنه.
توی RXJava چندین نوع Subject رو میشه استفاده کرد که از اینجا میتونین اونا رو بررسی کنین. برای کار خودمون از PublishSubject استفاده می کنیم، که قبلا اینجا توضیح دادمش.
حالا به قسمت جالب ماجرا میرسیم . پس با اداپتر ریسایکلرویومون شروع می کنیم:
private val clickSubject = PublishSubject.create<String>()

توی اداپترمون ، یک متغییر سراسری <PublishSubject<String می سازیم که آیتم های String رو Emit یا همون منتشر می کنه. بنابراین توی کلاس ویوهولدرمون کلیک لیسنرمون را ایجاد می کنیم و بعدش clickSubject ای رو که اون موقع ساختیم رو فراخوانی می کنیم و بعدش هم (onNext(item رو پشت سرش فراخوانی می کنیم. بنابراین هر وقت eventای از نوع کلیک وارد بشه ، Subjectمون اون event رو emit می کنه.
 
init { itemView.setOnClickListener { clickSubject.onNext(items[layoutPosition]) } }

بعدش یه متد می سازیم که یک <Observable<String رو بر می گردونه، مثل پایینی :
 

private fun setupItemClick() { subscribe = adapter.clickEvent .subscribe({ Toast.makeText(this, "Clicked on $it", Toast.LENGTH_LONG).show() }) }

بنابراین دوستان دیدین که استفاده از RXJava برای مدیریت کردن کلیک ها خیلی راحته، در ضمن می تونید یک پروژه ی نمونه رو توی این آدرس پیدا کنید. 
امیدوارم از این آموزش بهره لازمو برده باشین، لطفا عصو کانال تلگرامی زیر بشید :
 
AndroidSenior@

نظرات (۰)

هیچ نظری هنوز ثبت نشده است

ارسال نظر

ارسال نظر آزاد است، اما اگر قبلا در بیان ثبت نام کرده اید می توانید ابتدا وارد شوید.
شما میتوانید از این تگهای html استفاده کنید:
<b> یا <strong>، <em> یا <i>، <u>، <strike> یا <s>، <sup>، <sub>، <blockquote>، <code>، <pre>، <hr>، <br>، <p>، <a href="" title="">، <span style="">، <div align="">
تجدید کد امنیتی

تصاوير منتخب