notifyItemRangeInserted命令不起作用

时间:2019-06-06 01:00:56

标签: android kotlin android-recyclerview recycler-adapter

调用适配器的notifyItemRangeInserted时遇到问题。当我调用此方法时,什么也没发生,就这么简单。我试图在println()中设置一些ViewHolderAdapter,但是没有叫他,所以我看不到照片。

我已经尝试了适配器的所有“通知”命令,但这些都不起作用。只是什么都没有发生。

那是我的MainActivity。我测试过的所有对象和数组,它们都像魅力一样工作。我不明白为什么通知不起作用。

class MainActivity:AppCompatActivity(){

    //Declarations of the variables
    var pageNumber = 1
    var limitPerPage = 5
    lateinit var product: Product
    var productList = ArrayList<EachProduct>()
    var myAdapter  =ViewHolderAdapter(productList, productList.size)

    override fun onCreate(savedInstanceState:Bundle?){
        super.onCreate(savedInstanceState)

        setContentView(R.layout.activity_main)
        recyclerView.layoutManager = LinearLayoutManager(this@MainActivity)
        recyclerView.adapter = myAdapter

用于在列表中添加项目并通知ViewHolderAdapter的代码为


    //update the product list
    fun updateProductList(product:Product){
        for(i in 0 until 5 step 1){
            productList.add(product.produtos[i])
        }
        showData(productList,pageNumber*limitPerPage)//then notify
    }

    fun showData(productList:List<EachProduct>,productsListSize:Int){
        myAdapter.notifyItemRangeInserted(0,productList.size)
    }

那是我的ViewHolderAdapter类

class ViewHolderAdapter(private var products: List<EachProduct>, private val productsListSize: Int): RecyclerView.Adapter<ViewHolderAdapter.ViewHolder>() {

    override fun onCreateViewHolder(parent:ViewGroup,viewType:Int): ViewHolder {
        val view = LayoutInflater.from(parent.context).inflate(R.layout.recyclerview_layout, parent, false)
        returnViewHolder(view)
    }

    override fun getItemCount() = productsListSize

    override fun onBindViewHolder(holder: ViewHolder, position: Int) {

        holder.productName.text=products[position].nome
        Picasso.get().load(products[position].fabricante.img).into((holder.productLogo))
    }

    class ViewHolder(itemView: View): RecyclerView.ViewHolder(itemView) {

        val productName:TextView=itemView.ProductName

        var productLogo:ImageView=itemView.ProductLogo
    }

}

我希望ViewHolderAdapter被调用,但这没有发生。为什么会这样呢?我听不懂如果有人可以帮助我,我将非常感激。

1 个答案:

答案 0 :(得分:0)

因为变量productsListSize的初始值为零。从构造函数中删除它,然后像这样更改适配器:

class ViewHolderAdapter(private var products: List<EachProduct>): RecyclerView.Adapter<ViewHolderAdapter.ViewHolder>() {

    override fun getItemCount() = products.size

}