当前位置: 首页 > 知识库问答 >
问题:

RecycerView.Adapter。重写的方法onCreateViewHolder参数在viewType参数中始终为零

翟承志
2023-03-14

我想使RecycerView具有多种视图类型。如本主题:链接。

我知道这种方法的关键是方法getItemViewType(position:Int):Int{}。

fun getItemViewType(position: Int): Int { return 100 }
    class OrdersAdapter(val iAbsListFragment: IAbsListFragment,
                    val listItemsLD: LiveData<Result<List<Order>>>
) : RecyclerView.Adapter<OrderViewHolder>() {

    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): OrderViewHolder {
        viewType
        return OrderViewHolder(
            LayoutInflater.from(parent.context)
                .inflate(R.layout.card_order, parent, false), iAbsListFragment
        )
    }

    override fun getItemViewType(position: Int): Int { return 100 }

    override fun getItemCount(): Int {
        return if (listItemsLD.value is Result.Success) {
            (listItemsLD.value as Result.Success<List<Order>>).data.size
        } else {
            0
        }
    }

    override fun onBindViewHolder(holder: OrderViewHolder, position: Int) {
        if (listItemsLD.value is Result.Success) {
            val order = (listItemsLD.value as Result.Success<List<Order>>).data[position]
            holder.bindTo(order)
        }
    }
}

共有1个答案

方安怡
2023-03-14

别问我为什么。onCreateViewHolder必须返回RecycerView.Viewholder但不能返回RecycerView.Viewholder实现,则viewType参数将从getItemViewType(位置:Int)获得viewType

override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): OrderViewHolder //wrong, viewType always zero

override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): OrderViewHolder //work well, viewType from "override fun getItemViewType"
 类似资料:
  • 我是新来的百里香,我有以下问题。我想在html模板内调用一个java方法,但该方法需要一个参数,但问题是,无论我为参数传递什么,结果总是空的。 类别。html: 分类控制器:

  • 问题内容: 下面的代码之间有什么区别?将参数声明为是有什么好处? 问题答案: 由于形式方法的参数是局部变量,因此只有在内部匿名类被声明为final的情况下,您才能从内部匿名类访问它们。 这使您不必在方法主体中声明另一个局部最终变量:

  • 问题内容: 当我使用下面的ajax调用下面的Post方法时,为什么参数总是为null? 这是通过ajax对Web API方法的调用: 问题答案: 基本上,您只能有一个标量类型的参数,该参数用属性装饰,并且您的请求需要使用,并且POST有效负载应如下所示: 请注意,与标准协议相反,缺少参数名称。您仅发送值。 您可以在中阅读有关Web Api中的模型绑定如何工作的更多信息。 但是,当然,这种黑客入侵是

  • 我有以下代码: 当我试图编译它时,会出现以下错误: java不接受“基类”作为参数吗?原因是什么?有没有其他方法来编写代码?

  • 问题内容: 我有一个抽象类 Monitor.java ,它由类 EmailMonitor.java 子类 化 。 方法: 在 Monitor.java中 定义,并且必须在 EmailMonitor.java中 覆盖。 我目前在 EmailMonitor.java中 重写了如下方法: 但是,这会产生编译时错误: 是的子类,因此(至少在我看来)以这种方式覆盖它是很有意义的。看到编译器对我的逻辑不满意,

  • 我在使用IntelliJ IDEA 2020.2时启用了检查“@NotNull/@Nullable problems”。在编写自定义ThreadFactory时,我在的参数上收到IntelliJ IDEA检查警告“Not annotated parameter overrides@NotNull parameter”: 爪哇。util。同时发生的ThreadFactory接口不注释。IDEA的代码