Android ViewHolder中的getView有时返回'null'`

Android ViewHolder中的getView有时返回'null'`,android,kotlin,android-recyclerview,android-viewholder,Android,Kotlin,Android Recyclerview,Android Viewholder,“显示更多文本”在RecyclerView中的某些列表项上间歇性显示。如果说明文本超过5行,则应显示“显示更多”。这似乎不是单个项目的问题 说明是ViewHolder中的文本视图。在进行一些调试之后,我发现description.layout(getLayout)有时返回null,因此它无法操作其余的逻辑 我试图找出布局有时返回null的原因,因此添加了一个addOnLayoutChangeListener以查找大小是否在变化,结果是无论何时null,addOnLayoutChangeList

“显示更多文本”在RecyclerView中的某些列表项上间歇性显示。如果
说明
文本超过5行,则应显示“显示更多”。这似乎不是单个项目的问题

说明
是ViewHolder中的文本视图。在进行一些调试之后,我发现
description.layout
(getLayout)有时返回
null
,因此它无法操作其余的逻辑

我试图找出
布局
有时返回null的原因,因此添加了一个
addOnLayoutChangeListener
以查找大小是否在变化,结果是无论何时
null
addOnLayoutChangeListener
都会为
底部
右侧
返回一些新值

下面是我的任务的ViewHolder中的snipper,其中显示/隐藏
显示更多
显示更少
文本的逻辑

    Handler(Looper.getMainLooper()).post {
        description.layout?.let { l ->
            val lines = l.lineCount
            if (expanded || lines > 0 && l.getEllipsisCount(lines - 1) > 0) {
                showMoreLess.visibility = View.VISIBLE
                showMoreLess.setOnClickListener { showMoreLessTapped() }
            } else {
                showMoreLess.visibility = View.GONE
                showMoreLess.setOnClickListener {  }
            }
        }
    }
/**
*作业详细信息视图的适配器。
*
*@param navigator负责导航的类
*@param context上下文
*@param locationManager管理位置服务
*@param transitionToWorkflowStep处理触发工作流转换以及任何特定于UI的
*@param customFieldClickListener一个lambda,用于处理触发每个customfield类型的输入对话框
*@param notesClickListener处理notes字段的lambda单击
*@param jobActionCompletionClickListener处理辅助操作完成注释的lambda单击
*需要采取的行动。
*/
类JobDetailsAdapter(
私人val导航器:导航器,
val context:context,
私人val locationManager:locationManager,
私有val转换工作流步骤:(JobDetailSiteModel.JobDetailsAction)->单元,
私有val customFieldClickListener:(customField:CustomFieldItem)->单位,
私人val notesClickListener:()->单位,
私有val作业操作完成ClickListener:()->单元,
私有val任务ClickListener:(任务:JobDetailSiteModel.TaskItem,选中:布尔)->单位,
私人val showReadOnlyAlert:()->单位,
私人val显示导航选项:
(操作:JobDetailSiteModel.JobDetailsAction,fromStartTravelWorkflow:Boolean)->Unit
):RecyclerView.Adapter(){
初始化{
SetHassTableId(真)
}
私有val项:MutableList=mutableListOf()
private-var readOnly:Boolean=false
伴星{
private val ITEM\u TYPE\u HEADER\u TITLE=R.layout.list\u ITEM\u job\u details\u HEADER\u TITLE
private val ITEM\u TYPE\u HEADER\u WARNING=R.layout.list\u ITEM\u job\u details\u HEADER\u WARNING
私有val项目\类型\标题\警报=R.layout.list\项目\作业\详细信息\标题\警报
private val ITEM\u TYPE\u HEADER\u INFO=R.layout.list\u ITEM\u job\u details\u HEADER\u information
private val ITEM\u TYPE\u HEADER\u ACTIONS=R.layout.list\u ITEM\u job\u details\u HEADER\u ACTIONS
private val ITEM\u TYPE\u RESOURCES=R.layout.list\u ITEM\u job\u details\u RESOURCES
专用val项目\类型\列表\项目\单元格=R.layout.component\列表\项目\单元格
private val ITEM_TYPE_CUSTOM_FIELD=R.layout.component_CUSTOM_FIELD_cell
private val ITEM\u TYPE\u LIST\u ITEM\u TITLE\u HEADER=R.layout.LIST\u ITEM\u TITLE\u HEADER
private val ITEM\u TYPE\u TASK=R.layout.list\u ITEM\u TASK
私有val项目\类型\状态=R.layout.list \项目\作业\详细信息\作业\状态
private val ITEM_TYPE_TIME_ON_JOB=R.layout.list_ITEM_JOB_details_TIME_ON_JOB
私有val项目\类型\映射=R.layout.list \项目\作业\详细信息\映射
私有val项目\类型\帐户=R.layout.list \项目\作业\详细信息\帐户
私人val项目\u类型\u联系人=R.layout.list项目\u作业\u详细信息\u联系人
}
私有val resourceTapped={jobId:UID->
navigator.navigateToResources(作为活动的上下文,作业ID)
}
private val JobEditorAction={jobId:UID,jobEditor:JobEditorAction->
何时(作业编辑器){
JobEditorAction.JobNotes->{
notesClickListener()
}
}
}
私人val作业已停止=
{tertiaryActions:列表?,
jobAction:JobDetailSiteModel.JobDetailsAction?->
val activity=作为活动的上下文
val对话框视图:线性布局=
活动。放平。充气(
R.layout.bottom\u sheet\u job\u actions,
无效的
)直线布局
val dialog=BottomSheetDialog(活动)
tertiaryAction?.forEach{tertiaryAction->
val操作项=
activity.LayoutFlater.充气(R.layout.bottom\u sheet\u job\u actions\u item,空)
val locale=context.resources.configuration.locales.get(0)
何时(tertiaryAction.action){
WorkflowManualAction.CancelJob->{
actionItem.action\u item\u button.text=
tertiaryAction.title.forLanguage(区域设置)
actionItem.action\u item\u button.setOnClickListener{
navigator.toCancelJob(activity,tertiaryAction.extras!!作为字符串)
}
}
WorkflowManualAction.ManageJobTimes->{
actionItem.action\u item\u button.text=
tertiaryAction.title.forLanguage(区域设置)
actionItem.action\u item\u button.setOnClickListener{
Toast.makeText(活动,“编辑单击的作业时间”,Toast.LENGTH\u SHORT)
.show()
}
}
WorkflowManualAction.CompletionNote->{
actionItem.action\u item\u button.text=
tertiaryAction.title.forLanguage(区域设置)
actionItem.action\u item\u button.setOnClickListener{