首页 > 解决方案 > Recyclerview 上的所有按钮清单都不起作用

问题描述

我有带有复选框的recyclerview,我想使用按钮检查所有数据。我尝试了本教程,但是当我单击按钮时,日志调用 isSelectedAll 函数但无法选中复选框。我的代码有什么问题?

这是我的适配器代码

var isSelectedAll = false

override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ListApproveDeatilViewHolder {
    val itemView = LayoutInflater.from(parent.context)
            .inflate(R.layout.activity_list_approve_row, parent, false)

    return ListApproveDeatilViewHolder(itemView)
}

private lateinit var mSelectedItemsIds: SparseBooleanArray

fun selectAll() {
    Log.e("onClickSelectAll", "yes")
    isSelectedAll = true
    notifyDataSetChanged()
}

override fun onBindViewHolder(holder: ListApproveDeatilViewHolder, position: Int) {
    val approve = dataSet!![position]

    holder.soal.text = approve.title
    holder.kategori.text = approve.kategori

    if (!isSelectedAll){
        holder.checkBox.setChecked(false)
    } else {
        holder.checkBox.setChecked(true)
    }
}

这是我的活动代码

override fun onCreate(savedInstanceState: Bundle?) {
     private var adapter: ListApproveDetailAdapter? = null

    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_list_approve)
    ButterKnife.bind(this)

    getData()

    // this is my button onclick code

    select.setOnClickListener(){
        if (select.getText().toString().equals("Select all")){
            Toast.makeText(this, "" + select.getText().toString(), Toast.LENGTH_SHORT).show()
            adapter?.selectAll()
            select.setText("Deselect all")

        } else {
            Toast.makeText(this, "" + select.getText().toString(), Toast.LENGTH_SHORT).show()
            select.setText("Select all")

        }
    }

}
//this is for get my data for the recyclerview
fun getData() {
    val created_by = intent.getStringExtra(ID_SA)
    val tgl_supervisi = intent.getStringExtra(TGL_SURVEY)
    val no_dlr = intent.getStringExtra(NO_DLR)

    API.getListApproveDetail(created_by, tgl_supervisi, no_dlr).enqueue(object : Callback<ArrayList<ListApprove>> {
        override fun onResponse(call: Call<ArrayList<ListApprove>>, response: Response<ArrayList<ListApprove>>) {
            if (response.code() == 200) {
                tempDatas = response.body()
                Log.i("Data Index History", "" + tempDatas)
                recyclerviewApprove?.setHasFixedSize(true)
                recyclerviewApprove?.layoutManager = LinearLayoutManager(this@ListApproveActivity)
                recyclerviewApprove?.adapter = ListApproveDetailAdapter(tempDatas)
                adapter?.notifyDataSetChanged()
            } else {
                Toast.makeText(this@ListApproveActivity, "Error", Toast.LENGTH_LONG).show()
            }

            swipeRefreshLayout.isRefreshing = false

        }

        override fun onFailure(call: Call<ArrayList<ListApprove>>, t: Throwable) {
            Toast.makeText(this@ListApproveActivity, "Error", Toast.LENGTH_SHORT).show()

            swipeRefreshLayout.isRefreshing = false

        }
    })

}

这是我单击按钮时的日志

感谢您的任何帮助 :)

标签: androidandroid-recyclerviewkotlin

解决方案


正如我在评论中已经提到的,您正在使用两个不同的适配器实例。现在我看到你已经adapter在全球范围内宣布了。只需按如下方式修改您的代码并确保response.body()它具有数据:

 if (response.code() == 200) {
            tempDatas = response.body()
            Log.i("Data Index History", "" + tempDatas)
            recyclerviewApprove?.setHasFixedSize(true)
            recyclerviewApprove?.layoutManager = LinearLayoutManager(this@ListApproveActivity)
            adapter = ListApproveDetailAdapter(tempDatas)
            recyclerviewApprove?.adapter=adapter
        } else {
            Toast.makeText(this@ListApproveActivity, "Error", Toast.LENGTH_LONG).show()
        }

推荐阅读