【问题标题】:I have to press two times an item for delete it using setOnClickListener when i have only one item in the list当我在列表中只有一个项目时,我必须按两次使用 setOnClickListener 删除它
【发布时间】:2022-06-12 23:22:29
【问题描述】:

我有这个代码...想法是当用户推送 imagedeletenumberlistview 组件时,用户按下的元素被删除。如果我有多个项目,它可以正常工作,但是当我有一个项目时,我必须双击该项目才能删除我。

numberViewModel.numbers().observe(viewLifecycleOwner){ listN->
        if (listN.isNotEmpty()){
            val adapter=PhonesAdapter(requireContext(),listN)
            binding.listPhones.adapter=adapter
            binding.listPhones.setOnItemClickListener { _, view, position, _ ->
                view.findViewById<ImageView>(R.id.imagedeletenumberlistview).setOnClickListener {
                    Toast.makeText(requireContext(),"Contact delete ${listN[position].contactName}",Toast.LENGTH_SHORT).show()
                    numberViewModel.deletenumber(listN[position])
                }
            }
        }else{
            val adapter=PhonesAdapter(requireContext(),listN)
            binding.listPhones.adapter=adapter
        }
    }

更新 1

PhonesAdapter 类:

class PhonesAdapter (private var contex:Context, private val phones:List<NumberEntity>) : ArrayAdapter<NumberEntity> (contex,0,phones){

override fun getView(position: Int, convertView: View?, parent: ViewGroup): View {
    val v= LayoutInflater.from(context).inflate(R.layout.item_phones,parent,false)
    val phones=phones[position]
    v.findViewById<TextView>(R.id.contactName).text=phones.contactName
    v.findViewById<TextView>(R.id.phoneNumber).text=phones.number
    return v
}

}强调文字

【问题讨论】:

    标签: android kotlin


    【解决方案1】:

    那是因为您在 onClickListener 中使用了 onClickListener,因此当用户点击该项目时,将调用 setOnItemClickListener 并为 onClickListener 设置 onClickListener,但未获取删除代码叫。当您再次单击它时,将调用其中的删除代码并删除该项目。您可以像这样删除内部onClickListener

        numberViewModel.numbers().observe(viewLifecycleOwner){ listN->
            if (listN.isNotEmpty()){
                val adapter=PhonesAdapter(requireContext(),listN)
                binding.listPhones.adapter=adapter
                binding.listPhones.setOnItemClickListener { _, view, position, _ ->
                    Toast.makeText(requireContext(),"Contact delete ${listN[position].contactName}",Toast.LENGTH_SHORT).show()
                    numberViewModel.deletenumber(listN[position])
                }
            }else{
                val adapter=PhonesAdapter(requireContext(),listN)
                binding.listPhones.adapter=adapter
            }
        }
    

    【讨论】:

    • 我希望当我单击 item_layout 中的按钮时该项目已被删除,如果我喜欢你所说的,如果我在任何地方单击该项目将被删除
    • 您可以在PhoneAdapter 中使用接口侦听器。如果您向我提供它的代码,我将能够提供更多帮助:)
    • 对不起。这是一个辅助项目,但无论如何我添加了我的 PhoneAdapter 类的代码。我会感谢你的帮助。
    猜你喜欢
    • 1970-01-01
    • 2021-12-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-10
    • 1970-01-01
    • 2019-01-17
    • 2012-12-04
    相关资源
    最近更新 更多