为什么 onBindViewHolder 无法从 onBindBaseViewHolder 捕获异常?

赛奇·辛格

基本上,我有 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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

为什么该程序无法捕获异常?

来自分类Dev

为什么Python无法捕获C ++中引发的异常?

来自分类Dev

为什么我无法在MarkLogic请求中捕获某些异常?

来自分类Dev

为什么异常处理程序无法捕获模式匹配失败?

来自分类Dev

为什么无法很好地捕获此float转换异常?

来自分类Dev

为什么我无法捕获此python异常?异常模块/类与捕获的模块/类不匹配

来自分类Dev

为什么无法处理异常

来自分类Dev

为什么Async.Start似乎传播了无法捕获的异常?

来自分类Dev

为什么 PHP 在尝试实例化 SoapClient 对象时无法捕获导致的异常?

来自分类Dev

无法捕获异常NoSuchElementException

来自分类Dev

无法捕获某些异常

来自分类Dev

无法捕获SwiftMailer异常?

来自分类Dev

无法捕获异常

来自分类Dev

无法捕获ObjectOptimisticLockingFailureException异常

来自分类Dev

无法捕获 TweepError 异常

来自分类Dev

无法捕获异步异常

来自分类Java

为什么不捕获异常的代码允许捕获检查异常?

来自分类Dev

为什么Groovy无法捕获我的instanceof?

来自分类Java

为什么SQLException无法捕获SQLiteExcpetion?

来自分类Dev

为什么 catchError 无法捕获错误?

来自分类Dev

为什么catchError无法捕获错误?

来自分类Dev

为什么VB无法捕获查询错误

来自分类Dev

为什么我不能捕获OOM异常?

来自分类Dev

为什么未捕获多父异常?

来自分类Dev

为什么`catch`不能捕获这个异常?

来自分类Dev

为什么会有未捕获的异常?

来自分类Dev

为什么未捕获此异常?

来自分类Dev

为什么未捕获到异常?

来自分类Dev

尝试捕获无法捕获Java(Android)异常