1. در
onViewCreated از TodoFragment باید لیستی از تمام رکورد هایی که parentId برابر با 0 دارن رو بگیرین و به adapter بدین.
2. داخل adapter در قسمت onCreateViewHolder باید متدی تعریف کنید که با Touch روی هر آیتم، این متد فراخوانی بشه. برای اینکار راه های مختلفی هست، یه راهش استفاده از Extension هست.
میتونین همچین چیزی بنویسین:
fun <T : RecyclerView.ViewHolder> T.listen(event: (position: Int, type: Int) -> Unit): T {
itemView.setOnClickListener {
event.invoke(getAdapterPosition(), getItemViewType())
}
return this
}
و از اون تو adapter استفاده کنین.
در قسمتی که گفتم میتونین اینطوری ازش استفاده کنین:
override fun onCreateViewHolder(parent: ViewGroup?, viewType: Int): MyViewHolder? {
val inflater = LayoutInflater.from(parent!!.getContext())
val view = inflater.inflate(R.layout.item_view, parent, false)
return MyViewHolder(view).listen { pos, type ->
val item = items.get(pos)
//TODO do other stuff here
}
}
بسیار خب؛ شما در قسمت return تمام item رو در اختیار دارین. یعنی میتونین به راحتی به فیلد های آبجکت خودتون دسترسی داشته باشین ( در صورتی که فیلد در رکورد مور نظر فقط در اختیارتون هست و این کار از طریق pos برای شما امکان پذیر شده ). دقیقا در همین قسمت شما میبایست لیست adapter رو به روزرسانی کنین. یعنی اینکه با توجه به Id که از item میگیرین، یک کوئری به دیتابیس بزنین و تمام child هایی که parentId اونها برابر با id بدست اومده هست رو لیست کنین.
لیست بدست اومده رو بدین به adapter. که در اصل باید این 3 خط کد رو بنویسین:
items.clear();
items.addAll(newList);
notifyDataSetChanged();
---------------------------------------------
اون extension که براتون گذاشتم فقط یه مثاله، درگیرش نشین، فقط کافیه تو اون قسمت از adapter بتونین OnClickListener رو کنترل کنین.
شما خودتون تو این خط که نوشتین این کارو کردین:
adapter.setOnClickRecyclerListener(object : OnClickRecyclerListener {
تنها کاری که باید بکنین اینه که لیست adapter رو دوباره با اطلاعات جدید پر کنین.