基本上,我有 2 个适配器类,一个是 MyAdapter 类,另一个是 BaseRecyclerViewAdapter。
所以,MyAdapter extends BaseRecyclerViewAdapter
BaseRecyclerViewAdapter
import android.view.ViewGroup
import androidx.recyclerview.widget.RecyclerView
abstract class BaseRecyclerViewAdapter : RecyclerView.Adapter<RecyclerView.ViewHolder>() {
abstract fun onCreateBaseViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder
abstract fun onBindBaseViewHolder(viewHolder: RecyclerView.ViewHolder, viewType: Int)
abstract fun getBaseItemCount(): Int
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder {
return onCreateBaseViewHolder(parent, viewType)
}
override fun onBindViewHolder(viewHolder: RecyclerView.ViewHolder, viewType: Int) {
try {
onBindBaseViewHolder(viewHolder, viewType)
} catch (e: Exception) {
e.printStackTrace()
}
}
override fun getItemCount(): Int {
return getBaseItemCount()
}
}
我的适配器:
class MyAdapter: BaseRecyclerViewAdapter {
...
override fun onBindBaseViewHolder(viewHolder: RecyclerView.ViewHolder, viewType: Int) {
// manually creating to exception for testing purpose
val test = ""
val count = test.get(5)
}
......
}
现在,在 MyAdapter 类中,我扩展了 BaseRecyclerViewAdapter 并重写了 3 个方法,并编写了所有逻辑。现在在里面,(MyAdapter -> onBindBaseViewHolder)如果有任何异常发生,那么理想情况下它应该在里面捕获(BaseRecyclerViewAdapter -> onBindViewHolder),但它仍然在这里(MyAdapter -> onBindBaseViewHolder)
编辑: MyAdapter - onBindBaseViewHolder 中不存在 try catch 块,我不希望这样。看到我有 50 多个适配器类,我希望所有路由都通过这个基类,如果出现异常,那么应该从基类中捕获,这样我就不需要从每个类中添加。
看看这个:
override fun onBindViewHolder(viewHolder: RecyclerView.ViewHolder, viewType: Int) {
try {
test(viewHolder, viewType)
} catch (e: Exception) {
LogUtils.d("Hello print")
e.printStackTrace()
}
}
override fun getItemCount(): Int {
return getBaseItemCount()
}
fun test(viewHolder: RecyclerView.ViewHolder, viewType: Int) {
onBindBaseViewHolder(viewHolder, viewType)
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句