繁体   English   中英

notifyDataSetChanged 在 kotlin 中的适配器中不起作用

[英]notifyDataSetChanged does not work in adapter in kotlin

当我单击它时,我的 recylerview 项目上有一个删除按钮当我单击是按钮时,我正在显示一个警报对话框我想刷新我的 recylerview 但我不能。 我在代码末尾的适配器中直接调用 notifyDataSetChanged 但它不起作用。

MyAlertDialog(在我的适配器中)

            mAlertDialog.setPositiveButton("Yes") { dialog, id ->


            val databaseHandler: DBHelper = DBHelper(holder.itemView.context)
            val removedMed = Medicine(id = medicine.id,name = medicine.name,amount = medicine.amount,description = medicine.description)
            databaseHandler.deleteMedicine(removedMed)


            dialog.dismiss()

            notifyDataSetChanged()
        }

主要活动

class MainActivity : AppCompatActivity() {

private var adapter: MedicineAdapter? = null
private var medicineList : ArrayList<Medicine> = arrayListOf()
private var recyclerView: RecyclerView? = null


override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)


    getDataFromDb()
}


fun getDataFromDb(){

    val context = this
    val db = DBHelper(context)

    recyclerView = findViewById<View>(R.id.recyclerView) as RecyclerView

    adapter = MedicineAdapter(this, db.readData())


    val layoutManager = LinearLayoutManager(applicationContext)

    recyclerView!!.layoutManager = layoutManager
    recyclerView!!.itemAnimator = DefaultItemAnimator()

    // set the adapter
    recyclerView!!.adapter = adapter

    adapter!!.notifyDataSetChanged()

}


override fun onCreateOptionsMenu(menu: Menu): Boolean {
    menuInflater.inflate(R.menu.menu, menu)
    return true
}

override fun onOptionsItemSelected(item: MenuItem): Boolean = when (item.itemId) {
    R.id.addBtn -> {

        val intent = Intent(this,AddNewMedicine::class.java)
         startActivity(intent)

        true
    }
    else -> super.onOptionsItemSelected(item)
}

override fun onResume() {
    super.onResume()

    getDataFromDb()
}

}

医药适配器

class 医药适配器(

private val mainActivity: MainActivity,
val medicineList: ArrayList<Medicine>)

: RecyclerView.Adapter<MedicineAdapter.ListItemHolder>(){



override fun onCreateViewHolder(
    parent: ViewGroup, viewType: Int): ListItemHolder {

    val itemView = LayoutInflater.from(parent.context).inflate(R.layout.medicine_items, parent, false)

    return ListItemHolder(itemView)

}
inner class ListItemHolder(view: View) :
    RecyclerView.ViewHolder(view),
    View.OnClickListener {

    internal var name = view.findViewById<TextView>(R.id.name)

    internal var amount = view.findViewById<TextView>(R.id.amount)

    internal var description = view.findViewById<TextView>(R.id.description)

    internal var deleteButton = view.findViewById<ImageButton>(R.id.deleteBtn)

    internal var editButton = view.findViewById<ImageButton>(R.id.editBtn)

    init {
        view.isClickable = true
        view.setOnClickListener(this)
        deleteButton.setOnClickListener(this)
        editButton.setOnClickListener(this)
    }


    override fun onClick(view: View) {

        //val intentToCarPager = Intent(view!!.context, CarPagerActivity::class.java)

        //view.context.startActivity(intentToCarPager)

    }

}

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

    val medicine = medicineList!![position]

    holder.name.text = medicine.name

    holder.amount.text = medicine.amount

    holder.description.text = medicine.description

    holder.deleteButton.setOnClickListener {


        val mAlertDialog = AlertDialog.Builder(holder.itemView.context)

        mAlertDialog.setTitle("Are you sure you want to this record!") //set alertdialog title

        mAlertDialog.setPositiveButton("Yes") { dialog, id ->


            val databaseHandler: DBHelper = DBHelper(holder.itemView.context)
            val removedMed = Medicine(id = medicine.id,name = medicine.name,amount = medicine.amount,description = medicine.description)
            databaseHandler.deleteMedicine(removedMed)

            notifyDataSetChanged()
            dialog.dismiss()
            medicineList.removeAt(position)
            notifyItemRemoved(position)



        }


        mAlertDialog.setNegativeButton("No") { dialog, id ->


        }

        mAlertDialog.show()

    }

    holder.editButton.setOnClickListener {

        val dialog = UpdateMedicine(medicine)
        val manager = (holder.itemView.context as MainActivity).supportFragmentManager

        dialog.show(manager,"")


    }
}

override fun getItemCount(): Int {
    if (medicineList != null) {
        return medicineList.size
    }
    return -1
}

}

我通过从阵列中删除 object 解决了我的问题

        notifyDataSetChanged()
        dialog.dismiss()
        medicineList.removeAt(position)
        notifyItemRemoved(position)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM